我正在寻找一个很好的解决方案,如何在CodePipeline中运行参数化(自定义)构建,其中分支可以动态更改?
关于问题的一点背景:我需要一个将在某个分支上启动的按需环境。我们已经将Bamboo CI服务器用于部分基础架构,这也可以通过Jenkins中的自定义构建轻松实现。
所以基本上我需要一种方法来触发使用branch作为AWS中CodePipeline上的变量的构建。
答案 0 :(得分:2)
目前,CodePipeline不支持基于分支的构建。通常,CodePipeline最适合运行验证并自动发布"发布"分支。
预合并验证的一个选项是使用CodeBuild拉取请求支持来验证拉取请求,然后使用CodePipeline验证合并代码:https://aws.amazon.com/about-aws/whats-new/2017/09/aws-codebuild-now-supports-building-github-pull-requests/
答案 1 :(得分:1)
对于您的用例,最好为每个分支专门创建一个管道,因为听起来您的分支对于给定的环境将具有固定的名称。
这在分支代表环境的情况下效果很好,CodePipeline努力为更多动态分支(例如要素分支/拉动请求)执行持续交付。
对于后一种情况,我使用CodeBuild处理拉取请求,然后在S3归档文件中发布构建工件,然后将其用于触发CodePipeline以运行集成测试和暂存部署。途中有一些陷阱,但是它允许您利用CodePipeline的一些更强大的功能(例如,一次只能运行一个单阶段执行的功能,这对于具有共享资源的环境很重要)。>
答案 2 :(得分:0)
我们可以很好地通过以下方法获得动态分支支持。
我们在组织中遵循这种方法,并且效果很好。
AWS代码管道的局限性之一是,我们必须在创建管道时指定分支名称。但是,我们可以使用下面显示的架构来克服此问题。
创建一个将GitHub Web-hook数据作为输入的Lambda函数,使用boto3将其与AWS管道集成(拉出管道并进行更新),并具有API网关以作为静态调用来调用Lambda函数,并最后,创建一个到GitHub存储库的网络挂钩。
外部链接:
答案 3 :(得分:0)
在进行一些研发后,我也有相同的要求,AWS代码构建部分中没有条件基准触发器,有一个调度cron基础作业的触发器仅在一分钟后运行。如果需要在检查条件后运行触发器或动态运行codebuild,则必须使用aws sdk
我使用aws cli和nodejs
对于命令(cli):
aws codebuild start-build --project-name project1
--environment-variables-override name=variablename,value=variablevalue
对于节点js
var AWS = require("aws-sdk");
var codebuild = new AWS.CodeBuild();
var params = {
projectName: machineName, /* required */
environmentVariablesOverride: [
{
name: 'APPID', /* required */
value: appid, /* required */
},
{
name: 'BUILDID', /* required */
value: buildidnew, /* required */
},{
name: 'REBUILD', /* required */
value: rebuildid, /* required */
}
],
};
codebuild.startBuild(params, function(err, data) {
if (err) {
callback(err, null);
}
else {
callback(null, data);
}
});
记住变量值应该是一个字符串