【问题标题】:Code pipeline to build a branch on pull request根据拉取请求构建分支的代码管道
【发布时间】:2019-04-21 16:59:19
【问题描述】:

我正在尝试创建一个代码管道,当我向 AWS 中的主分支发出拉取请求时,它将构建我的分支。我有很多开发人员在我的组织中工作,所有开发人员都在他们自己的分支上工作。我对创建 lambda 函数不是很熟悉。期待解决方案

【问题讨论】:

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


【解决方案1】:

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

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

这不是最好的,但 afaik 是做你想做的事的唯一方法。

我在那里,不推荐它,原因如下:

如果您需要上述工作流程,我建议您使用 Github.com。对此感到抱歉。

【讨论】:

  • 如您的 URL 中所述,只需使用推荐的更改检测方法,而不是在管道中定期检查即可避免此限制。我认为它们是指 GitHub webhook。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    AWS 代码管道的限制之一是我们必须在创建管道时指定分支名称。然而,我们可以使用如下所示的架构来解决这个问题。

    flow diagram

    创建一个 Lambda 函数,它将 GitHub web-hook 数据作为输入,使用 boto3 将其与 AWS 管道集成(拉管道并更新),有一个 API 网关来调用 Lambda 函数作为休息调用,并且最后创建一个到 GitHub 存储库的 web-hook。

    外部链接:

    相关话题:Dynamically change branches on AWS CodePipeline

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多