如何触发GitHub合并请求的CodePipeline?

如何为打开,编辑或合并拉取请求配置触发CodePipeline?

这是一个Terraform配置:

resource "aws_codepipeline_webhook" "gh_to_codepipeline_integration" {
  name            = "gh_to_codepipeline_integration"
  authentication  = "GITHUB_HMAC"
  target_action   = "Source"
  target_pipeline = aws_codepipeline.mycodepipeline.name

  authentication_configuration {
    secret_token = var.github_webhook_secret
  }

  // accept pull requests
  // Is there a way to filter on the PR being closed and merged?  This isn't it...
  filter {
    json_path    = "$.action"
    match_equals = "closed"
  }

}

CodePipeline设置为接受具有在过滤器中指定的所有条件的Webhook事件,该条件对应于Pull Request Events

请注意,GitHub文档声明了action的{​​{1}}字段(我的重点是粗体):

  

已执行的操作。可以是已分配,未分配,   review_requested,review_request_removed,已标记,未标记,已打开,   编辑,关闭,ready_for_review,锁定,解锁或重新打开。如果   操作已关闭且合并键为假,提取请求为   用未合并的提交关闭。 如果该操作已关闭且已合并   键为true,则合并了合并请求。   同步拉取请求时触发,Events API时间轴   不要在同步动作中包含拉取请求事件。

似乎我需要对PullRequestEvent && $.action==closed都进行过滤,但看起来我不能同时进行过滤。如果仅对$.pull_request_merged=true进行过滤,则如果PR不合并而关闭,则管道将重建。这是我的疏忽吗,还是CodePipelines在触发方面不如CodeBuild项目灵活?

gy810071752 回答:如何触发GitHub合并请求的CodePipeline?

对于打开/更新的拉取请求,因为CodePipeline的Git集成需要分支名称,所以本机不支持此名称,因为分支名称是可变的,除非您在长期运行的分支(例如dev,{{1 }}等(例如,如果您使用的是基于Gitflow的工作流程)。

我们从动态分支支持PR的方式是在工作流的构建/单元测试阶段中使用CodeBuild,然后打包存储库并将构件移植到S3。从那里,我们使用S3人工制品作为源触发用于集成和接受环境的部署管道。使用CodePipeline进行部署非常强大,因为它可以自动确保一次只能执行一个阶段,这意味着给定应用程序一次只能进行一次更改,同时要通过给定环境。

然而,这种方法非常复杂,需要大量Lambda魔术与SQS FIFO队列混合才能处理并发PR(这是为了克服CodePipeline的取代行为),但这是一个非常强大的模式。我们还使用GitHub评论进行触发接受阶段和在CodePipeline中自动批准手动批准步骤等操作。

一旦您准备好合并PR,我们只需使用触发了master的正常CodePipeline部署到生产中-您还需要做的一件事就是确保您使用在PR上构建和测试的人工制品。

,

我不确定在请求请求打开时为什么要触发整个管道吗?我通常设置的方式是:

  • CodePipeline监视主分支并在按下该分支时触发
  • 它将在CodeBuild中运行一些构建
  • 如果构建通过,它将运行部署

然后我们有了CodeBuild,它由CodePipeline和GitHub拉取请求触发:

resource "aws_codebuild_webhook" "dev" {
  project_name = aws_codebuild_project.dev.name

  filter_group {
    filter {
      type     = "EVENT"
      pattern = "PULL_REQUEST_CREATED,PULL_REQUEST_UPDATED"
    }
  }
}

然后,您可以使用codebuild filters选择何时触发构建。 terraform docs也很有帮助。

本文链接:https://www.f2er.com/3109051.html

大家都在问