我正在寻找一个很好的解决方案,如何在CodePipeline中运行参数化(自定义)构建,其中分支可以动态更改?
关于问题的一点背景:我需要一个将在某个分支上启动的按需环境。我们已经将Bamboo CI服务器用于部分基础架构,这也可以通过Jenkins中的自定义构建轻松实现。
所以基本上我需要一种方法来在AWS中的CodePipeline上使用branch作为变量来触发构建。
目前,CodePipeline不支持基于分支的构建。通常,CodePipeline最适合运行验证并自动释放“发布”分支。
预合并验证的一个选项是使用CodeBuild拉取请求支持来验证拉取请求,然后使用CodePipeline验证合并代码:https://aws.amazon.com/about-aws/whats-new/2017/09/aws-codebuild-now-supports-building-github-pull-requests/
对于您的用例,最好专门为每个分支创建一个管道,因为听起来您的分支将具有给定环境的固定名称。
这在分支代表环境的情况下很有效,其中CodePipeline正在为更多动态分支执行持续交付,例如功能分支/拉取请求。
对于后一种情况,我使用CodeBuild处理拉取请求,然后在S3存档中发布构建工件,然后我使用它来触发CodePipeline以运行集成测试和分段部署。在此过程中有一些陷阱,但它允许您利用CodePipeline的一些更强大的功能(例如,一次只能运行单个阶段执行,这对于具有共享资源的环境很重要)。
我们可以通过以下方法获得动态分支支持。
我们在组织中遵循这种方法,并且效果很好。
AWS代码管道的一个限制是我们必须在创建管道时指定分支名称。但是,我们可以使用下面显示的架构来克服此问题。
创建一个Lambda函数,它将GitHub web-hook数据作为输入,使用boto3将其与AWS管道集成(拉动管道并更新),使用API网关将Lambda函数作为休息调用进行调用,最后创建GitHub存储库的Web钩子。
外部链接: