Joh*_*ohn 5 github amazon-web-services terraform aws-codepipeline aws-codebuild
如何配置 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"
}
}
Run Code Online (Sandbox Code Playgroud)
CodePipeline 设置为接受具有过滤器中指定的所有条件的 webhook 事件,这对应于Pull Request Events。
请注意,GitHub 文档针对actiona 字段进行了说明PullRequestEvent(我以粗体强调):
已执行的操作。可以是已分配、未分配、review_requested、review_request_removed、标记、未标记、打开、编辑、关闭、ready_for_review、锁定、解锁或重新打开之一。如果操作已关闭且合并的键为 false,则拉取请求已通过未合并的提交关闭。如果操作已关闭且合并键为真,则合并拉取请求。虽然在同步拉取请求时也会触发 webhook,但事件 API 时间线不包括拉取请求事件和同步操作。
似乎我需要同时过滤$.action==closed && $.pull_request_merged=true,但看起来我不能同时做这两个。如果我只是过滤,$.action==closed那么如果 PR 关闭而不合并,我的管道将重建。这是我的疏忽,还是 CodePipelines 的触发器不如 CodeBuild 项目灵活?
对于打开/更新的拉取请求,由于 CodePipeline 的 Git 集成需要分支名称,因此本机不支持此名称,因为分支名称是可变的,除非您在长时间运行的分支(例如 等)上打开 PR (例如dev,qa如果您使用基于 Gitflow 的工作流程)。
我们支持基于动态分支的 PR 的方式是使用 CodeBuild 进行工作流程的构建/单元测试阶段,然后打包存储库并将工件构建到 S3。从那里,我们使用 S3 工件作为源触发集成和验收环境的部署管道。使用 CodePipeline 进行部署非常强大,因为它会自动确保一次只能执行一个阶段,这意味着在任何时候给定应用程序只有一项更改会通过给定环境。
然而,这种方法相当复杂,需要大量 Lambda 魔法与 SQS FIFO 队列混合来处理并发 PR(这是为了克服 CodePipeline 的取代行为),但它是一个非常强大的模式。我们还使用 GitHub 评论来执行诸如触发接受阶段以及自动批准 CodePipeline 中的手动批准步骤等操作。
一旦您准备好合并 PR,我们只需使用从 master 触发的普通 CodePipeline 即可部署到生产环境 - 您还需要做的一件事是确保使用在 PR 上构建和测试的工件。
我不确定为什么要在拉取请求打开时触发整个管道?我通常设置的方式是:
然后我们有 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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用代码构建过滤器来选择何时触发构建。terraform 文档也很有帮助。
| 归档时间: |
|
| 查看次数: |
3523 次 |
| 最近记录: |