AWS CodePipeline 将多个存储库作为单一来源进行跟踪

AWS CodePipeline track multiple repositories as a single source

我正在调查 CodePipeline 是否适用于我们的用例:

我们有数百个存储库,全部由 CodeCommit 托管。 build/test/release 所有这些的过程都是相同的,除了较小的配置。

我想做的是设置一个管道,该管道将 build/test/release 在任何这些存储库中进行更改。我不想构建所有存储库,只构建发生变化的存储库。

我不想用不同的源存储库创建 100 个相同的管道...

这可能吗?如果没有,是否有任何解决方法?

您可能需要混合使用 CloudWatch 规则 + AWS Lambda + CodePipeline

CloudWatch 规则

  1. CodeCommit 状态更改 --> CloudWatch 规则 --> 调用 Lambda(创建一个文件,其中包含关于哪个 repo 和分支等的信息 (例如:状态-change.json)。 -> 将文件上传到 S3 存储桶(例如:pipeline_source)。

  2. S3 (pipeline_source) 事件 -> CloudWatch --> 触发管道

代码流水线

[ 来源 (S3 状态-change.json, BuildSpec.yml, 等等..)] --> [构建(CodeBuild,自定义脚本读取状态change.json文件来确定构建和部署什么] -->
[部署 (...)]

方法 # 2 并行执行(不同repos同时更新)

由于管道运行修订的方式,我认为不可能连接单个管道来满足您的需求。 另一种方法是用阶跃函数状态机替换 codePipeline。它允许并行执行。 您可以使用适合您 CI/CD 需要的操作来连接步进函数。我快速浏览了 aws 服务集成 支持的不多。您需要使用 lambda 函数为 ex 调用其他 aws 服务:codebuild

CodeCommit 状态变化 --> CloudWatch 规则 --> 调用 Step 函数状态机

CodePipeline 是围绕每个项目/服务一个管道的模型设计的。

尝试将多个独立的发布过程合并到一个管道中是一项挑战,因为在等待阶段释放以避免不必要的发布时,更新的更改可以替换旧的更改的取代行为。

它还会使某些功能(例如发布历史记录)的用处大打折扣。

在您的场景中,100 个管道可能是最佳方法。 CodePipeline 最近将每个区域每个帐户的管道默认限制提高到 300,因此您在限制方面应该没有问题。

您可以使用 CloudFormation 等工具来简化许多类似管道的设置和配置。另请记住,CodePipeline 不会对在给定月份内没有发布的管道收费,因此,如果您有很多管道,但实际上每个月只发布其中的几个,那么它不会花费您那么多。