做者:Tiffany Jachjanpm
在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微信公众号。