什么是持续部署 (CD)?

对于构建、测试和部署步骤自动化的 DevOps 做法,持续部署已将其逻辑发挥到了极致。 如果对代码所做更改能够成功通过管道的所有先前阶段,则无需任何手动干预,该更改即可自动部署到生产中。 采用持续部署意味着您可以在不影响产品质量的情况下,尽快向用户提供新功能。

持续部署以成熟且经充分测试的持续集成和持续交付阶段为基础。 定期执行小幅代码更改可使其逐步完善,采用构建和测试自动化过程并通过各种预生产环境进行改进,如果没有发现问题,即可执行最终部署以供上线。 构建稳定可靠的自动化部署管道后,发布产品可能就不必大费周章 - 每天都可以发布多次。

尽管并非每个软件项目都适合以自动化方式完成最终部署上线工作,但将持续部署有效地应用到一部分单独的元素中,同样能够使您受益。 本文将探讨为实现构建部署全面持续部署而实施最后一步工作之前所涉及到的内容和注意事项。

什么是持续部署 (CD)?

使持续部署成为现实

如果您的集成和部署过程是完全手动的,您需要执行代码冻结、采用全员参与的测试策略并且在产品发布之日整个公司都要保持高度紧张的状态,那么波澜不惊地执行以小时为单位的部署听起来则可能无异于幻想。

但是现实是,从诸如 Netflix、Etsy 和 Amazon 的大型公司到试图跟上市场步伐的小型公司,大量的组织都在积极地采用这种方法。 利用持续部署系统,他们可以将发布时间从数周甚至数月缩短到数小时。 在越来越多的行业当中,能够快速提供功能并迅速响应反馈都变得至关重要。

作为持续集成和交付的进一步扩展,持续部署以测试和构建部署全自动化过程为基础,在提高速度的同时可确保不会以牺牲质量为代价。 但是,有效实施持续部署不仅仅需要扎实的基础。

在计划如何实施持续部署系统时,要考虑到的关键问题是如何发布您的更改。 除了选择滚动更新而非使服务器离线以避免频繁中断在线服务之外,您还可以将部署作为自动化测试过程的扩展。

Canary 部署会将更新代码的部署有限地发布给一小部分用户,这些用户将成为生产期间不知情的测试者。 通过监控行为和用法指标,您可以在将新版本部署到更广泛的受众之前检查以确保其中未引入新的问题。

一些公司通过 Canary 置信度分数对自动化实现了进一步完善,该分数可以自动将大量指标与基准进行比较。 仅当分数超过指定阈值时才会自动持续部署,而指标分析也为进一步调查潜在问题提供了起点。

蓝绿构建部署过程是组织实施持续部署系统的一种常用技术,因为通过使旧代码保持在线可以在出现问题时更轻松地回滚到之前版本,直到您确信更改可如期运行为止。 如果需要,您可以在初始 Canary 部署之后采取蓝绿部署。

无论您是运行蓝绿部署还是直接部署以替换旧版本,都需要监控生产系统的运行状况,以便能够快速响应发布过程中遗漏的任何错误。

密切注意从磁盘空间和 CPU 使用率到请求或事务数量等指示系统运行状况的特定指标并将其与基准进行比较,可以在出现异常时提供预警。 然后,您可以通过在管道中放置修复来决定是回滚更改还是继续部署。

持续部署的注意事项

在跟随持续部署的潮流之前,值得花点时间考虑一下采用 CD 时常会出现的一些问题。

软件开发生命周期不仅涉及到代码更改。 用户研究、产品营销、交互设计、文档、商业、法律和支持团队都要履行其职责。

如果没有与利益相关者共同奠定良好基础并没有与其充分交流以了解其在发布过程中的需求,那么贸然转型到持续部署可能会使他们感到开发工作不受控制。 这可能会导致需要引入手动检查点和审查阶段以放慢进度,甚至导致全持续部署系统沦为失败的实验而遭受拒绝。

建立协作文化至关重要。 让其他团队充分参与整个开发过程,以便他们在设计、安全性问题、术语或合规性方面的意见能够尽早得到采纳,这便是通过简短反馈循环来提高软件开发生命周期效率的一个示例。 与广收意见同样重要的是提供有关发布时间及内容的直观信息。 利用 CI 服务器(一种持续构建部署工具)通过仪表板和通知发布信息,自动使利益相关者掌握最新信息。

有时,仅提供有关未来计划的直观信息还不够。 当您开发较大型的功能或需要控制发布时间时,如果每个提交仅仅通过了全部测试就匆匆部署上线,这种做法往往不够理想。

功能标志是用于控制生产中代码可见性的一种选项,其优点在于代码是实时的,因此您可以监控意外的故障。 另一种方法是使用部署到单独管道的专用分支,该分支不会自动推送到生产中,从而结合了持续交付和持续部署以满足您的需求。

持续部署最佳做法

如果操作得当,持续部署可以帮助团队自动执行向用户部署软件。 遵循持续部署最佳实践可以帮助您简化流程并获得更好的结果。 例如,务必定期监测和衡量您的管道,以发现任何问题的迹象。 让整个团队参与构建有效的 CI/CD 管道也非常有意义。

持续部署与持续交付

我们很容易将两者混淆,但是持续部署和持续交付都是 CI/CD 管道中 CD 端的不同部分。 While continuous delivery is focused on automating the steps required to deliver the software to users (for example, by automating builds, test automation, etc.), continuous deployment is a logical continuation of the process, automating the release of the software to end users provided that all necessary criteria are met.

总结

持续部署利用自动化最大程度地提高了效率,可在不影响质量的前提下快速向用户交付功能。 这种 DevOps 做法的基础是定期且快速的反馈。 自动化测试、生产监控、与其他功能和用户行为的协作都为软件开发过程提供了宝贵意见。 通过将工作拆分成小块并以更高的频率发布,您可以根据反馈不断地进行调整并持续改进交付的产品。