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 规则
CodeCommit 状态更改 --> CloudWatch 规则 --> 调用 Lambda(创建一个文件,其中包含关于哪个 repo 和分支等的信息
(例如:状态-change.json)。 -> 将文件上传到 S3 存储桶(例如:pipeline_source)。
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 不会对在给定月份内没有发布的管道收费,因此,如果您有很多管道,但实际上每个月只发布其中的几个,那么它不会花费您那么多。
我正在调查 CodePipeline 是否适用于我们的用例:
我们有数百个存储库,全部由 CodeCommit 托管。 build/test/release 所有这些的过程都是相同的,除了较小的配置。
我想做的是设置一个管道,该管道将 build/test/release 在任何这些存储库中进行更改。我不想构建所有存储库,只构建发生变化的存储库。
我不想用不同的源存储库创建 100 个相同的管道...
这可能吗?如果没有,是否有任何解决方法?
您可能需要混合使用 CloudWatch 规则 + AWS Lambda + CodePipeline
CloudWatch 规则
CodeCommit 状态更改 --> CloudWatch 规则 --> 调用 Lambda(创建一个文件,其中包含关于哪个 repo 和分支等的信息 (例如:状态-change.json)。 -> 将文件上传到 S3 存储桶(例如:pipeline_source)。
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 不会对在给定月份内没有发布的管道收费,因此,如果您有很多管道,但实际上每个月只发布其中的几个,那么它不会花费您那么多。