连续交付的管道设计模式

2020-07-20 01:15:12

业务敏捷性建立在代码敏捷性的基础上。对于现代数字产品和服务来说,能够快速、安全地按需发布是真正的竞争商业优势。

自2004年以来,我们设计、构建和部署了代码管道,以实现应用程序和基础设施的自动化。我们将分享我们所学到的七种管道设计模式,在提高自主性、透明度和可维护性的同时提高速度、敏捷性和质量。

持续交付是“以可持续的方式将所有类型的更改安全、快速地送到用户手中的能力”。如果您考虑敏捷与工作矩阵上的持续交付,它正好介于持续集成和持续部署之间。这些通常统称为CI/CD。

在2019年DevOps状况报告中,超过3.1万名受访者报告了他们的开发和交付流程的有效性。精英和表现不佳的人之间的结果是令人震惊的。精英性能的部署次数增加了200倍,部署速度提高了100倍,从事故中恢复的速度也提高了2600倍,回滚版本的可能性降低了7倍。

这项研究表明,对于精英表演组织来说,速度和稳定性并不是对立的!你可以两者兼而有之--事实上你需要两者兼而有之--才能为你的数字产品和服务获得真正的竞争优势。

代码管道是持续交付的主要技术构件。现代管道将应用程序和基础设施源代码转换为可部署到任何环境的版本化包。通过自动化所有构建和部署系统的平凡任务,团队可以自由地专注于增值功能。

虽然代码管道已经存在了近20年--我们早期最喜欢的CruiseControl之一于2001年首次发布--但这些年来它们已经有了相当大的发展,并且在过去的几年里真正发挥了作用。

根据我们的工作和客户的观察,我们确定了在许多现代技术组织中看到的7种管道设计模式。

没有GUI设置步骤!管道逻辑的管理方式与任何其他应用程序代码一样,并遵循相同的分支策略和审查流程。

容器上的管道执行允许您的CI/CD平台支持许多不同的工作负载,而每个工作负载可以有自己的构建环境来满足其独特的需求。

CI流道配置是自动的、完全相同的、免提的。CI跑步者可以扩展以满足需求,并可以在核心时间处于待机状态,以最大限度地减少延误。

机密存储在管道外部,其输出被屏蔽,从而提高了安全性。

可复用库包含可从流水线代码引用并独立开发和测试的公共流水线逻辑。

将流水线库视为任何其他可发布的软件。它们有自己的repo、管道,并且使用良好的发行说明进行了单元测试。

只要有可能,管道就会使用特定于语言的工具(如make、Rake、NPM、Maven或其他工具)调用外部任务,以简化管道并保持本地和CI工作流相同。

构建和部署管道在逻辑上应该是独立的,可独立运行,并由自动或手动事件触发

构建一次,部署多个。将重点放在第一个构建上。它将成为您可以多次部署的工件。

对环境持不可知论的态度。没有特定于环境的包和外部化的特定于环境的属性,相同的构建可以在任何环境中运行。

把它们都打包在一起。一切-所有源代码,包括基础设施代码,都应该组合在一起,成为一个版本化的包。

B牧场提交、拉请求和合并到主线都可以触发不同的管道行为,并根据团队的工作方式进行优化。

将合并到主线部署到显示最新集成代码的非生产或演示环境。

每次提交都会自动触发正确的管道,构建管道特别针对任何问题的速度和快速报告进行了优化。

使用全渠道通知,您可以在仪表板、聊天频道、电子邮件和其他媒体中启用拉取请求状态的团队通知。

只部署构建管道生成的版本化包,这些部署由人工或自动事件触发。

每个代码分支都会获得一个以分支命名的完整的临时环境,可以轻松地创建或销毁该环境。

CI运行人员使用具有临时权限的云本地IAM功能,因此他们可以承担角色并获得正确的权限来完成其工作。

自动发布会留下透明的书面记录,这对于治理和质量都是可审计的。

释放门可以调用外部API并使用响应来决定是继续释放还是暂停。

这些是我们在客户合约中越来越多地看到和使用的七种管道设计模式。虽然这些在速度和稳定性方面有了巨大的飞跃,但代码流水线也不是没有挑战。

安全性是我们看到的最大挑战,因为自动化传统上以人为中心的流程所带来的复杂性。管道复杂性、团队采用、以变更咨询委员会为中心的文化现代化以及数据库自动化是需要解决的其他重大挑战。但这是可能的,我们每天都这样做。

业务敏捷性建立在代码敏捷性的基础上。对于现代数字产品和服务来说,能够快速、安全地按需发布是真正的竞争商业优势。代码管道,尤其是这七种设计模式,可以帮助您的组织在速度和稳定性方面实现巨大飞跃,并让您的团队达到精英级别。