我正在尝试创建一个代码管道,当我向AWS中的主分支发出拉取请求时,该管道将构建我的分支。我有很多开发人员在我的组织中工作,所有的开发人员都在自己的分支机构工作。我对创建lambda函数不是很熟悉。希望获得解决方案
您可以在每次创建新的拉取请求时动态创建管道。查找CodeCommit触发器(在旧的CodePipeline UI中),需要lambda。
基本上它是这样工作的:复制现有的管道并更新源分支。
这不是最好的,但却是做你想做的事的唯一方法。
我当时在那里,不会推荐它,原因如下:
- 在我所在的地区,我达到了20的限制:"更改检测设置为定期检查源更改的管道的最大数量"-但是,你肯定想要这个功能(https://docs.aws.amazon.com/codepipeline/latest/userguide/limits.html)
- 已删除分支的触发器无法正常工作,因此当分支已合并到master中时,无法删除创建的管道
如果您需要如您所述的工作流,我建议您使用Github.com。很抱歉。
我最近实现了一种方法,该方法使用CodeBuild GitHub webhook支持来运行初始单元测试和构建,然后将源存储库和构建的工件作为压缩存档发布到S3。
然后,您可以在CodePipeline中使用S3存档作为源,然后在那里您可以通过集成测试、暂存部署等转换PR工件和代码
这是一个非常强大的模式,尽管这里的一个陷阱是,如果一次创建了很多pull请求,你可以让CodePipeline的执行被取代,因为一次只有一个执行可以通过给定的阶段(这实际上是一个非常重要的属性,尤其是如果你的集成测试是在共享资源上运行的,并且你不希望你的应用程序的多个实例同时运行数据设置/拆卸任务)。为了克服这一点,我在CodeBuild发布S3工件时向SQS FIFO队列发布S3通知,然后轮询队列,将每个工件复制到触发CodePipeline的不同S3位置,但前提是在第一个CodePipelines源阶段之后,当前没有执行等待执行。
通过以下方法,我们可以很好地支持动态分支。
AWS代码管道的限制之一是,我们必须在创建管道时指定分支名称。但是,我们可以使用下面显示的体系结构来克服这个问题。
流程图
创建一个Lambda函数,该函数以GitHub的web-hook数据为输入,使用boto3将其与AWS管道集成(拉取管道并更新),使用API网关对Lambda函数进行调用作为rest调用,最后创建一个到GitHub存储库的web-hok。
外部链接:
-
https://aws.amazon.com/quickstart/architecture/git-to-s3-using-webhooks/
-
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/codepipeline.html
相关线程:在AWS CodePipeline 上动态更改分支