作者:Tiffany Jachja
在8月份,我分享了一个关于通过模式和实践启用CI/CD的谈话。这篇博客文章总结了上述谈话的内容,告诉读者如何实现持续的软件交付。
CI/CD是什么?
今天的软件交付,不仅仅是将可交付的东西交到客户手中。为了成功,团队和组织需要以快速、安全和可重复的方式交付价值。
下面DevOps生命周期图中是交付软件所需的操作:
持续集成和持续交付(Continuous Integration and Continuous Delivery,CI/CD)使得软件交付工作流,能够涉及多个团队和跨越开发、保证、操作、安全和财务团队的功能。让我们更详细地讨论CI和CD,以便更好地理解目标和实现模式。
持续集成(CI)支持开发团队和工作流。在任何开发团队中,最大的挑战都是管理特性开发。使用代码涉及开发、合并冲突、代码管理和测试,导致部署提前时间长、部署不频繁和高更改失败率。解决方案是利用CI以自动化的方式集成开发变更,从而改进特性开发的节奏和过程。
持续交付(CD)支持运营团队和工作流。目标是安全并重复地将工件交付到生产环境中。CD流程帮助实现服务的自动化操作,包括发布、部署和监视应用程序。当我们将一个工件提升到生产环境或更高的环境中时,我们会给验证过程添加严格性。为环境的每个阶段或工作流添加额外的测试,允许我们在到达客户之前捕获问题。
今天,我们将责任和目标向左转移,以确保在软件交付过程的早期捕获到问题。否则,生产故障和事件管理可能对企业有害。
持续集成实践和模式
在前面提到的高级环境中,每个CI/CD进程都需要构建应用程序代码。当你构建应用程序时,源代码将被编译或解释并处理为可部署的包。这个可部署的包称为CI/CD过程中的工件。让我们分享一些使用持续集成实践处理构建过程的实际例子。
对构建进行自动化和测试
CI流水线中的主要实践是自动化构建过程。这个构建过程可以利用特定代码基的构建工具。例如,你可以使用npm来构建Node JavaScript应用程序,或者使用Maven和Gradle来构建基于Java或JVM的应用程序。
在构建过程中,你希望确保集成并执行单元测试,以便对不满足功能需求的代码进行构建时失败。另一方面,没有足够的单元测试或代码覆盖率可能会导致构建通过但在CI/CD进程线上失败。因此,确保你拥有单元测试对于持续集成流程来说是不可或缺的。它们在机器上创建和运行的资源也更便宜。端到端(E2E)开销大,调试困难,因为它们需要运行多个服务。
工作的主线
另一个CI实践涉及到开发团队尽早将他们的代码集成到他们代码存储库的主要分支中。这可以防止在开发人员进行特性开发时,对特性和主要分支的维护变得非常糟糕。即使事情仍在进行中,该工作对主分支的任何最终用户或测试人员都是不可见的。
修复坏掉的
第三个CI实践涉及到修复主干中损坏的构建。持续集成假设你的团队正在开发已知的稳定版本的代码。
持续交付实践和模式
持续的交付过程可以确保安全、快速和可持续地将任何类型的更改交付到生产环境或交付到消费者手中。持续交付实践和模式有助于实现这些结果。
自动化交付生命周期
每个组织都有一个创建和交付代码的流程。一个持续交付流水线使这个过程自动化。典型的交付职责包括配置基础设施、部署应用程序、批准部署变更、质量保证/测试和监视。使用CD流水线作为这些现有进程的模型。
基础架构即代码(Infrastructure as code)是一种帮助团队提供、配置和管理基础架构资源的实践。
定义发布和回滚策略
软件发布是软件向消费者的分发。无论何时我们发布软件,我们都会引入漏洞、问题、bug和非性能软件的风险。回滚部署或生成修复程序的原因可能有很多。
定义一个适用于你的用例的发布策略,以减少变更的恐惧和风险。一些交付团队将使用“渐进交付”策略向客户发布新特性。其中一些实践包括Canary部署和特性标志管理。我建议学习更多关于这些功能的知识,以及如何通过CI/CD流水线启用它们。
此外,回滚策略往往反映发布策略。是否决定在部署新实例时保持应用程序的当前版本运行,这取决于你。只要确保你有一个回滚策略来处理任何宕机和数据丢失。
在较低的环境中快速失败
使用瀑布方法进行交付的组织艰难地努力满足不断变化的环境和期望。在流水线中快速失败类似于在开发团队中借用敏捷和精益方法成为事实标准。我们主要希望做的是将责任和活动转移到交付软件的过程中。向左思维的转变使开发人员获得了技能和工具,可以在不破坏东西的情况下快速行动。
大多数产品团队可能更喜欢在问题到达客户之前抓住它。在较低的环境中使用流水线以快速失败,并避免频繁的生产事故。
总结
你的CI/CD流水线充当SDLC流程的模型。它建立了一个自动化的企业治理过程,确保你的组织能够积极地管理和理解风险。
这篇文章主要介绍了用于构建健壮的、有能力的CI/CD流水线的现有实践和模式。如果你从一个实践开始,我建议你将测试集成到CI流程中。这将导致关于自动化其他相关软件开发和交付工作流的额外讨论。
这就是我演讲的全部内容!感谢每一个加入任何现场会议与此内容。交付的生态系统是不断进化的。我希望继续简化和扩大我们今天持续交付的方式。如果你对这些内容感兴趣,我将在10月7-8日的CDCon 快闪演讲中分享一个可伸缩的CI/CD框架。如果你想知道未来的内容和活动,可以关注我的推特( @tiffanyjachja )和领英。
为下一代持续交付协作提供一个中立的家。
CDF(Continuous Delivery Foundation,持续交付基金会)是许多快速增长的持续交付项目,包括Jenkins、Jenkins X、Spinnaker和Tekton,的供应商中立家园。CDF通过开放模型、培训、行业指南和可移植性重点来支持DevOps从业者。
Linux基金会是非营利性组织,是技术生态系统的重要组成部分。
Linux基金会通过提供财务和智力资源、基础设施、服务、活动以及培训来支持创建永续开源生态系统。在共享技术的创建中,Linux基金会及其项目通过共同努力形成了非凡成功的投资。扫描二维码关注LFAPAC微信公众号。