代码管道可根据拉取请求建立分支

时间:2019-01-31 10:47:05

标签: amazon-web-services aws-codepipeline aws-codebuild

我正在尝试创建一条代码管道,该管道将在向AWS中的master分支发出拉取请求时构建我的分支。我的组织中有很多开发人员,所有开发人员都在自己的分支机构中工作。我对创建lambda函数不是很熟悉。希望找到解决方案

3 个答案:

答案 0 :(得分:0)

您可以在每次创建新的请求请求时动态创建管道。查找CodeCommit触发器(在旧的CodePipeline UI中),为此需要lambda。

基本上它是这样的:复制现有管道并更新源分支。

这不是最好的方法,但afaik是您要做的唯一方法。

我在那儿,出于以下原因不推荐它:

  • 我在我所在的区域达到了20个限制:“已将更改检测设置为定期检查源更改的最大管道数量”-但是,您一定要使用此功能(https://docs.aws.amazon.com/codepipeline/latest/userguide/limits.html
  • 已删除分支的触发器无法正常工作,因此当分支已合并到master中时,您将无法删除创建的管道。

如果您需要如上所述的工作流程,我建议您使用Github.com。抱歉。

答案 1 :(得分:0)

我们可以很好地通过以下方法获得动态分支支持。

AWS代码管道的局限性之一是,我们必须在创建管道时指定分支名称。但是,我们可以使用下面显示的架构来克服此问题。

flow diagram

创建一个将GitHub Web-hook数据作为输入的Lambda函数,使用boto3将其与AWS管道集成(拉出管道并进行更新),并具有API网关以作为静态调用来调用Lambda函数,并最后,创建一个到GitHub存储库的网络挂钩。

外部链接:

相关主题:Dynamically change branches on AWS CodePipeline

答案 2 :(得分:0)

我最近实现了一种方法,该方法使用CodeBuild GitHub webhook支持来运行初始单元测试和构建,然后将源存储库和人工制品作为压缩存档发布到S3。

然后您可以将S3存档用作CodePipeline中的源,然后在其中可以通过集成测试,暂存部署等来转换PR工件和代码。

这是一个非常强大的模式,尽管这里的一个陷阱是,如果您一次创建了很多拉取请求,则在一个执行只能通过给定阶段执行的情况下,可以取代CodePipeline执行。时间(这实际上是一个非常重要的属性,尤其是当您针对共享资源运行集成测试,并且您不希望应用程序的多个实例同时运行数据设置/拆卸任务时)。为了克服这个问题,我在CodeBuild发布S3工件时将S3通知发布到SQS FIFO队列,然后轮询该队列,将每个工件复制到触发CodePipeline的其他S3位置,但前提是当前没有任何执行等待在第一个CodePipeline源阶段之后执行。