我正在尝试创建一个代码管道,当我向AWS中的主分支发出拉取请求时,它将构建我的分支。我有很多开发人员在我的组织中工作,所有开发人员都在他们自己的分支上工作。我对创建lambda函数不是很熟悉。希望有一个解决方案
每次创建新的pull-request时,您都可以动态创建管道。查找CodeCommit触发器(在旧的CodePipeline UI中),您需要lambda。
基本上它的工作方式如下:复制现有管道并更新源分支。
这不是最好的,但是afaik是做你想做的事的唯一方法。
我在那里,不会推荐它,原因如下:
如果您需要如您所述的工作流程,我建议您使用Github.com。非常遗憾。
我们可以通过以下方法获得动态分支支持。
AWS代码管道的一个限制是我们必须在创建管道时指定分支名称。但是,我们可以使用下面显示的架构来克服此问题。
创建一个Lambda函数,它将GitHub web-hook数据作为输入,使用boto3将其与AWS管道集成(拉动管道并更新),使用API网关将Lambda函数作为休息调用进行调用,最后创建GitHub存储库的Web钩子。
外部链接:
我最近实现了一种方法,它使用CodeBuild GitHub webhook支持来运行初始单元测试和构建,然后将源存储库和构建的工件作为压缩存档发布到S3。
然后,您可以将S3存档用作CodePipeline中的源,然后您可以通过集成测试,暂存部署等转换PR工件和代码......
这是一个非常强大的模式,虽然这里有一个陷阱,如果你一次创建了大量的pull请求,你可以让CodePipeline执行被取代,因为一次只能执行一个给定的一个阶段(这个实际上是一个非常重要的属性,特别是如果您的集成测试针对共享资源运行,并且您不希望应用程序的多个实例同时运行数据设置/拆卸任务)。为了解决这个问题,我在CodeBuild发布S3工件时向SQS FIFO队列发布S3通知,然后轮询队列,将每个工件复制到触发CodePipeline的不同S3位置,但前提是当前没有等待的执行在第一个CodePipeline源阶段之后执行。