首页 > 其他分享 >DevOps现代化

DevOps现代化

时间:2022-10-09 15:03:20浏览次数:47  
标签:集成 持续 代码 现代化 DevOps 构建 提交 流水线

从持续构建到持续集成

遗留系统的构建方式

在遗留系统中,一次上线前构建过程可能是这样的:一位打包专员,在本地或远程的机器上拉取代码,完成集成、打包和测试的工作,并准备手动部署。这时,即使再紧急的代码提交都会被拒绝,因为一个干净的打包环境来之不易,新引入的代码会导致所有的流程重来一遍。

Kent Beck 早在上世纪 90 年代就提出了持续集成的概念,即集成的频率越高越好,极限情况下就是持续地每时每刻都在集成。这就是极限编程的理念:越是痛苦的事情,就越要频繁地去做,这样每次做的时候就没有那么痛苦。

持续构建

持续构建是指,每次代码提交都会触发一次构建工作,并执行一些相关任务。这个过程由持续集成工具自动化完成,大致过程如下:

1. 开发人员将代码提交(PUSH)到远程代码仓库;

2. 持续集成服务器按一定时间间隔(比如 1 分钟)轮询代码仓库,以便及时发现代码变更;

3. 如果发现了代码变更,持续集成服务器就将代码拉取(PULL)到自己本地;

4. 持续集成服务器按照指定的构建脚本执行各项任务,包括编译、单元测试、代码扫描、安全扫描、打包等;

5. 任务执行完毕后,会把结果(成功或失败)反馈给开发团队。

有了持续构建,就能解决遗留系统最头疼的问题之一:不知道从哪去找可以部署到各个环境的软件包。打包部署不再依赖于打包专员的手工操作,大大缩短和简化了部署流程。

在遗留系统中引入持续构建

建议选用 Atlassian 公司的三件套:BitBucket、Jira 和 Confluence。可以将代码管理、需求管理和知识管理打通,补齐遗留系统中缺失的这些内容。

遗留系统要做到单次构建(如每日构建)还是相对容易的,但要想做到“持续”构建,开发人员就必须改变之前的一些工作习惯。就拿提交代码来说,很多开发人员会等到所有的代码都编写完成,才进行一次提交。这样,代码冲突的风险非常高,很可能出现代码写了两天,合并就用了半天的尴尬情况。如果每个人都这样,就无法做到每天构建多次的目标。

要避免这种局面,开发人员就要对自己编写的代码做出良好的规划,分解出若干小的任务,每个任务都能在很短的时间内完成,而且任务最好是按照一个功能的端到端的场景来划分,而不要按技术层级去划分。

做好任务分解,做到小步提交。小步提交不是指每次commit尽量少的代码,如果提交的内容很少,但却破坏了编译和测试,这样的提交也是不合格的。

真正的小步提交是指,每个commit都完成了一个端到端的功能点,因此都是可以PUSH到代码仓库的。可以针对这个commit进行验证,测试甚至是部署。

七步提交法

1.PULL 最新代码,确保在最新的代码基础上开始开发;

2. 本地编写代码;

3. 本地构建:本地执行编译和单元测试等,以确保新编写的代码是可以工作的;

4.PULL 最新代码:需要先检查 CI 状态,如果是绿色则可以 PULL;

5. 本地构建:再次执行编译和单元测试,以确保新编写的代码和最新代码可以成功集成;

6.PUSH 代码:将本地修改 PUSH 到远端服务器;

7. 流水线构建:触发 CI 流水线进行构建,并监控流水线状态,直到通过。

持续集成

持续集成包含持续构建的所有步骤,并且在它后面还增加了部署到某个环境的流程,比如部署到测试环境,并且进行冒烟测试、接口测试等。同时,在这个阶段,你还可以优化一下流水线,进一步提升效率。

持续集成流水线的重要作用之一就是快速反馈。对于编译不通过、测试失败、代码风格不符合标准等问题,我们都希望第一时间看到流水线失败,继而根据日志去分析失败原因,快速修复。但遗留系统的代码库往往很庞大,仅仅编译可能就会很长时间,如果再跑测试和代码扫描,我们得到反馈的时间就会大大拉长。

对构建进行分级,把那些执行速度快、反馈质量高的步骤放到一级构建中,将执行速度慢的步骤放到次级构建环节。比如单元测试执行的速度很快,就可以放到较早的构建环节;而集成测试很慢,就可以放到次级构建;对于代码扫描这种更慢的构建,甚至可以使用单独的流水线,在每天晚上执行一遍。只有把不同构建过程按执行速度和反馈效果拆分为不同阶段,整个构建或集成过程才更像是一条真正的流水线。

小结

 

标签:集成,持续,代码,现代化,DevOps,构建,提交,流水线
From: https://www.cnblogs.com/rickybelment/p/16772116.html

相关文章

  • Google 发布:DevOps 2022现状报告
    在过去的八年中,全球超过33,000名专业人士参与了AccelerateStateofDevOps调查,使其成为同类研究中规模最大、运行时间最长的一项。AccelerateStateofDevOps报告提......
  • .NET现代化应用开发 - CQRS&类目管理代码剖析
    ​本周MASAFramework进行了第四次课程直播,课程主题为类目管理的开发,直播中进行了理论讲解和实战演练(CQRS实践的演示可直达推文底部观看直播回放)开始环节我们围绕三个点......
  • devops学习笔记-jenkins pipeline流水线发布
    jenkinspipeline介绍要实现CD,先要实现CI。CDPipeline就是一个代码文件,里面把你项目业务场景都通过Groovy代码和Pipeline语法实现,一个一个业务串联起来,全部实现自动化,从代......
  • 移动研发 DevOps 落地实践
    大家好,我是来自支付宝终端工程技术团队的十境。本文将带领大家了解支付宝移动端如何随着移动市场的告诉发展,逐步沉淀优化出适用业务发展需求的研发效能实践。0.背景如何解......
  • DevOps落地实践点滴和踩坑记录-(2) -聊聊平台建设
    很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来。这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧。​​......
  • Azure DevOps Server 2022新功能:禁止用户管理自己创建的分支(mange-permission)
    在之前版本的AzureDevOpsServer(之前名为TFS)中,如果用户拥有创建分支的权限,则对自己创建的分支具有管理权限(manage-permission),可以为自己创建的分支授予其它成员推送代码的......
  • Azure DevOps Server 2022新功能:存档或禁用Git代码库
    在使用AzureDevOpsServer(之前名称为TFS)实现源代码版本管理的时候,经常会碰到这样的场景:一个项目已经结束,不允许开发人员对源代码做任何修改,但是还允许开发人员查阅,实现对......
  • Azure DevOps Server 2022新功能:全新的TFVC操作界面
    AzureDevOpsServer(之前名称为TFS)从2013年开始就支持分布式(Git)和集中式(TFVC)两种代码库,近年来由于Git被软件研发团队广泛采纳,集中式代码库(TFVC或SVN)逐渐被开发人员抛弃;但......
  • 深入浅出DevOps:流水线任务改造
    ......
  • DevOps落地实践点滴和踩坑记录-(1)
    记录初衷本人一直在从事企业内DevOps落地实践的工作,走了不少弯路,也努力在想办法解决面临的问题,期间也经历过不少人和事情,最近突然有想法把经历过的,不管好的不好的都记录下来......