原文地址: https://medium.com/@sanjayaben/how-to-build-an-efficient-ci-cd-pipeline-b5738ad567c8 我觉得这篇文章真的能学到很多理论知识,便于我们实施流水线。
在过去几年中,持续集成和持续交付一直是许多敏捷软件开发团队的首要任务。它被认为是建立DevOps实践的基础,大多数组织将其视为实现快速可靠的软件交付的关键推动力。
持续交付是敏捷软件开发中的核心思想。《敏捷宣言》中最早的一项原则可以追溯到2001年,内容如下:
“我们的首要任务是通过尽早并持续交付有价值的软件来满足客户。”
敏捷软件开发的成功在很大程度上取决于团队能否迅速向最终用户推出功能并结合最终用户的反馈不断改进软件。周期越短,用户满意度就越高。有效的CI / CD管道将是实现如此快速周转的关键。
基本原理
很少有驱动CI / CD管道的基本原理。
我们的方法
设计用于交付企业应用程序的CI / CD管道不仅需要考虑基础知识,还需要考虑组织或软件特有的实际挑战。需要考虑的几点是
在我们的案例中,我们采用了以下四步方法。
持续交付和持续部署经常被混淆,但这是两回事。马丁·福勒(Martin Fowler)将差异描述如下,
“持续交付有时会与持续部署相混淆。持续部署意味着每项变更都将贯穿整个流程并自动投入生产,从而导致每天进行许多生产部署。连续交付只是意味着您能够进行频繁的部署,但可能会选择不进行部署,通常是由于企业偏向于降低部署速度。为了进行持续部署,您必须进行持续交付。”
全自动持续部署通常被认为是业务风险,尤其是在企业设置中。这就是为什么存在一个“发布过程”的原因,在该过程中,更改将被系统地,可预测地交付给最终用户。
持续集成
当开发人员将代码提交到其相关功能分支时,将触发我们的CI流程。现在,与Git存储库关联的Git挂钩将触发Jenkins集群中的构建过程。Jenkins管道用于驱动构建过程,并且存在与构建过程相关的质量关卡检查。质量门检查应基于对共同开发部门的最低要求。在我们的上下文中,质量门检查可以验证,
持续交付
如果质量门已经通过,则开发人员可以提交其拉取请求。集成管理器会将代码合并到通用开发分支。这将启动通用开发分支上的构建过程,如果成功,将继续构建docker映像。
理想情况下,所有测试都应作为集成过程的一部分执行,但实际上由于测试执行时间的原因,这效率很低。因此,我们将其设计为一个称为“连续测试”的过夜时段。
持续测试
这是一个通宵的过程,其中会在软件的最新成功构建上执行功能测试,安全扫描和性能测试等测试。在执行测试之前,将根据最新的docker镜像将新容器部署在连续测试环境中。连接到Kubernetes集群的永久卷将作为测试的前提条件被还原。请注意,所有这些活动都是计划的并且是完全自动化的。
第二天早上在每日站立会议之前检查测试报告。任何脚本问题将由质量保证团队解决,而任何代码问题将由开发团队解决。CT故障被认为是优先考虑的问题,并将在最早的情况下得到解决。
受控部署
由于大多数艰苦的工作已经在前面的三个步骤中完成,因此简化了部署。成功的CT周期是唯一的资格标准,可以在任何时候进行发布。发行脚本将
现在,可以将发布版本部署在发布管道中的其他环境中。最终,将发行版推广到生产将是业务决策。docker + kubernetes设置将简化部署过程,并且结果在所有环境中都是可预测的。
可用技术
在我们的案例中,我们选择使用工具组合,因为它似乎可以为我们的复杂需求提供最佳解决方案。大多数开发企业产品的团队将从这种全新的方法中受益。我们的工具栈包括
结论
高效的CI / CD管道可以大大缩短产品上市时间,并有助于保持所交付软件的稳定性和质量。但是,成功的实施不仅需要正确的技术,还需要关键利益相关者的承诺。项目发起人在投资时应具有长远眼光,技术领导者在推动转型中起着