持续交付 (CD) 是一种自动执行准备将软件发布到生产中所涉及的手动步骤的做法。
持续交付 (CD) 建立在持续集成 (CI) 的基础上,自动执行准备将软件发布到生产中所涉及的步骤。
每次将代码更改合并到指定分支时,持续集成流程都会运行一系列检查,包括自动化单元测试,并创建构建。 持续交付扩展了这一流程,自动将每个构建部署到一系列测试和暂存环境并运行进一步自动化测试。
这些测试包括集成测试、UI 测试、性能测试(如负载、浸泡和压力测试)以及端到端测试。 根据您的行业,您还可以使用持续交付运行安全测试、无障碍功能测试以及手动用户验收或探索性测试。 构建成功通过每个阶段后,就可以发布到生产。
与持续集成一样,有效持续交付做法的关键是尽可能自动执行流程。 这包括在每个阶段提供反馈,并在构建未能通过某个阶段时提醒团队,以便您快速解决问题。
持续交付和持续部署都涉及自动将构建部署到环境并运行自动化测试。 因此,这两个词有时会互用。 不过,持续交付和持续部署之间仍有一个明显的区别。
借助持续部署,代码更改每次成功通过所有测试阶段后,就会自动部署到生产中。 持续交付则涉及最后阶段的手动步骤,也就是将软件发布到生产。
虽然持续部署听起来像是软件开发团队的理想目标,但许多团队经过合理考量决定选择持续交付。
CI/CD 流程的最后阶段涉及将代码更改部署到生产。 对于持续交付,虽然发布流程本身是自动化的,但发布到生产的决定还是手动步骤。
某些团队将持续交付作为持续部署的垫脚石。 在完善自动化测试和检查时,手动触发到生产的最终部署可以提供一个安全网。 在这种情况下,您可能会选择先进行几个月的持续交付,然后再将每个成功的代码更改自动部署到生产。
但是,每天或每小时多次部署软件更新并不总是理想的选择。 对于版本化软件(包括移动应用、API、嵌入式软件或桌面产品),通常有必要将更改分组到更大的版本中。 已安装产品的用户不会希望每隔几个小时就更新一次应用,而升级到新的 API 版本可能会对您的客户产生重大影响。 在持续交付和部署之间做出选择,就是要为企业和用户做出正确的决定。
虽然具体的构建步骤、环境和测试取决于您的产品和组织,但以下一般原则还是可以帮助您构建持续交付流程:
持续交付使团队能够更快、更频繁地发布软件,同时减少进入生产的 bug 数量。 为此,关键在于持续测试更改并在发现问题时立即解决,确保代码随时可以发布。
此外,持续交付还提供了多项额外优势:
实现持续交付流程可能会遇到一些挑战:
搭建持续交付流程看似艰巨,但只要方法得当,它可以大幅加快软件发布速度,同时最大限度地减少 bug。
有效实现持续交付的关键是采用 DevOps 思维。 DevOps 倡导协作和从短的迭代周期中快速获取反馈,而不是将软件开发流程视为单向传送带 – 要求、代码和报告从一个团队传递到另一个团队。
改变您对“完成”的定义可以帮助您接受这种心态。 不要在将代码交给测试时就认为任务已经完成,只有您的新功能或代码更改发布上线后才算完成。 如果在管道的任何阶段发现问题,与必须由更改委员审批的冗长报告相比,及时传达反馈并展开协作可以更快地解决问题。 这就是持续交付的意义所在。
如需帮助您开始采用持续交付的更多提示,请阅读我们的 CI/CD 最佳做法指南。
持续交付使发布软件变得更加轻松快捷,您可以更频繁地部署到生产。 更频繁交付的小型更新将取代大型的季度或年度发布。 这不仅意味着用户可以更快获得新功能和 bug 修正,还意味着您可以了解软件的实际使用情况并相应调整计划。
虽然某些组织倾向于对发布流程的最后一步保持控制,但对其他组织来说,CI/CD 管道的逻辑结论是使用一种称为持续部署的做法自动将版本上线。 您可以在我们 CI/CD 指南的下一部分中了解详情。
TeamCity 是一个 CI/CD 平台,广泛支持各种构建工具、测试框架、容器和云基础架构提供商。 无论您是想在现场、云端或两者结合来托管构建机器,TeamCity 都会协调构建任务以实现最高效率。
TeamCity 的可定制管道逻辑意味着您可以选择何时并行运行流程(例如在不同平台上进行测试)以及何时要求成功完成后才能进入下一阶段。 无论您在哪里工作,可配置的通知都能为您提供所需信息,帮助您避免不必要的干扰。 最后,详细的结果有助于确保生产路径保持畅通。