服务
关于
CloudProse博客
聚光灯

江苏体彩上的企业CI / CD:务实的方法

我们如何在大型组织的约束下工作以开发CI / CD流,以帮助我们在江苏体彩上快速,安全且负责地部署应用程序?
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal) | 2019年5月15日

首先,没有人关心您的CI / CD管道有多酷。

我知道听到这很痛。但这是真的。

这是人们的东西 关心:

  • 尽快,安全且可靠地将功能部署到生产中
  • 就是这些,这些就是东西。

为此,构建良好的CI / CD管道是一种手段。事实证明,这比看起来要难得多。

前奏:基本管道

现在,如果您必须在真空中设计CI / CD管道,那么除了组织上的任何复杂性之外,构建的内容看起来都非常简单。实际上,它看起来很像任何CI / CD产品都可以找到的Hello World类型的教程。像这样:

在江苏体彩世界中,我们看到越来越多的人通过江苏体彩帐户(唯一的真正江苏体彩安全边界)隔离构建阶段。所以实际上,您的管道 必须住在一个集中的“共享服务”帐户中,可以使用跨帐户IAM角色接触到不同的环境进行部署。

这样可以自动化您的基本任务:测试您的代码,构建工件并进行部署,也许还需要进行一些人为检查。

更复杂的管道

这对一个专案工作的人来说效果很好,但是如果您要支持整个开发团队怎么办?云开发的现实是,更多的测试发生在已部署的服务上,而不是在本地计算机上。因此,多个团队成员必须能够访问自己的云基础架构堆栈。

我们在Trek10上已经认识到这一点了,这就是为什么我们最近开源了一个 无服务器CI / CD 江苏体彩快速入门。它包含CloudFormation和其他自动化,您需要使用该自动化来设置多帐户CI / CD管道,以从功能分支启动动态云环境。

嘿,我从来没有说过您的管道不可能很棒,只是这不是最重要的事情...

这不仅是有用的设置-真的很棒!

但是我们可以走得更远。实际上,在任何大型企业中,我们都会 之所以要走得更远,是因为我们现在已经达到了设计不受技术要求的约束,而受组织本身的结构约束的程度。没错:我们将开放一罐 康韦定律 在我们的管道上。

实用管道

尽管该快速入门管道很酷,但它有一个巨大的局限性:它在整个过程中使用江苏体彩 码Pipeline,江苏体彩 码Commit和江苏体彩 码Build。尽管这些服务可能会很好(它们确实做得很好,我们将在后面再详细介绍),但这根本不是大型企业的运作方式。他们在遗留工具上进行了大量投资。也许是一个带有大量定制插件的巨型Jenkins实例。也许是专有代码存储库,不会随处可见。或更可能是所有这些都同时发生,因为我们正在谈论的是各种各样的开发团队,每个团队都有自己的工作流程和问题。精美的CodePipeline-in-a-box解决方案可能适用于 有人,但可能不适用于 大家.

这就是为什么每个公司现在都拥有一个名字可爱的中央云团队的原因,例如“ Cumulonimbus团队”。他们正在完成过去十年的中央IT团队的工作。

这就是悖论。我们的假设企业非常需要集中式CI / CD解决方案,因为他们需要出售具有适当安全性边界的江苏体彩账户,并且需要对生产部署保持谨慎的控制。

但是他们还需要一个分散的解决方案,因为不存在一种万能的方法。如果您尝试将一个工作流程强加于这些开发团队,则它们将在您周围工作。他们将实施影子IT解决方案,这些解决方案会跳过安全性和问责制,以换取速度和舒适感。那不是可行的交易。

这里没有灵丹妙药,但是解决此问题的一种方法是将其分为两部分:构建和发布。

构建与发布管道

当您稍微分解一下这个问题后,就可以清楚地分清责任。一方面,产品开发团队最有能力设计单元测试并打包其工件-“ CI / CD”的“ CI”部分。他们知道他们使用的是哪种语言,使用了哪些工具,等等。我们将其称为“构建管道”:

这个管道 可能含有 测试帐户中的部署步骤;这完全取决于开发团队。

构建管道:当将代码推送到存储库时发生的一组自动和手动测试。
输入值输出量测试类型管道定义
可部署的工件整理,单元测试,安全扫描开发团队

然后,开发团队负责将其代码自动转换为可以部署在江苏体彩账户中的一个或多个工件(一个zip文件,一个转换的CloudFormation模板,无论如何)。他们可以使用所需的任何存储库,Git流或CI工具,只要它们最终以可部署的输出对象放置在共享的,可集中访问的位置为对象。 S3存储桶是一个合理的位置。

现在,另一方面,中央云团队已经具备了处理“ CI / CD”的“ CD”部分的设备齐全:该工件在他们控制的各种应用程序环境(阶段,QA生产)中的推出。我们将流程的这一部分称为“发布管道”。

发布管道:通过目标帐户促进部署工件的管道
输入值输出量测试类型管道定义
可部署的工件部署的应用程序烟雾测试,手动认可闸中央云团队

在几乎人类已知的每个CI / CD平台上编写了总的CloudFormation轮询脚本后,我可以确认:这是教科书中对不加区分的繁重工作的定义,我希望江苏体彩为我做这件事。

尽管构建管道可以使用工具和工作流的任何组合,但是发布过程是众所周知的,有据可查的并且受到严格限制。我告诉您,江苏体彩 码Pipeline在某些方面确实很出色。这是它的特长:部署CloudFormation堆栈。

中央云团队将开发一套CodePipeline“发行模板”,这些模板可用于不同类型的应用程序推出(例如Kubernetes应用程序,江苏体彩 SAM应用程序等),并管理在环境之间推广代码所需的权限和批准。

实际运行与发布

让我们看看这在现实生活中将如何发挥作用。请遵循以下图表和步骤。

  1. (构建管道)开发团队将代码提交到其存储库。
  2. (内置管道)开发团队选择的CI工具(Jenkins)对代码进行单元测试,整理和安全性扫描
  3. (构建的管道)开发团队的CI作业打包了部署工件(在这种情况下为SAM应用程序)。
  4. (BUILD PIPELINE) Dev team’s CI job uploads the artifact to S3 using a well-known path convention, perhaps something like /account_id/app name/branch name/latest.zip.
  5. (RELEASE PIPELINE)S3事件触发器在应用程序的“共享服务” 江苏体彩账户中启动动态Lambda功能
  6. (发布管道)Lambda根据应用程序提取适当的“发布模板”,并部署将管理部署的CodePipeline
  7. (RELEASE PIPELINE)CodePipeline管理多个江苏体彩账户的部署和测试

此设计的一个棘手部分是处理管道生命周期的“清理”部分:在删除分支时拆除应用程序和关联的管道。一种可能的解决方案是在分支删除时将零字节的工件推送到中央存储桶,从而触发清除例程。

中心工件桶提供了一个单一的知名场所,可以允许访问构建服务器,而中央IT团队可以管理必需的每个帐户基础结构,以通过诸如Service Catalog之类的程序启动和维护发布管道。我们将包含S3缓存和Lambda worker的特定于帐户的基础结构称为“锚堆栈”。

这里有复杂性吗?当然。但是大多数内容恰好位于您想要的位置:在中央云团队的肩膀上,IAM和CloudFormation的书呆子。各个开发团队都可以腾出精力来构建自己的工作流,没有经过定义的发布流程就无法将代码投入生产,每个人都……好吧,“高兴”这个词可能太强了,但至少他们在做什么问题:共同努力为用户创造价值,这是任何CI / CD系统的真正目标。

生活很快就交给您,随着我们与客户的合作,这些设计不断发展。您如何在组织中使用CI / CD进行快速,安全,负责的部署? 给我们留言 - 我们很乐意听取您的意见。

这篇文章中的想法是与Trek10的众多人员共同开发的,Joel Haubold特别值得一提。

作者
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal)