如何从CodeBuild获取CodeCommit拉取请求ID以同步构建状态
解决CodeBuild获取CodeCommit拉取请求ID并发布评论的问题
从EventBridge事件中提取所需参数
当EventBridge通过CodeCommit的拉取请求创建事件触发CodeBuild时,事件Payload里已经包含了你需要的所有字段:pullRequestId、仓库名、源提交ID、目标提交ID。你可以通过两种方式获取这些值:在CodeBuild项目中配置环境变量
直接在CodeBuild项目的「环境变量」设置里,添加基于EventBridge事件的变量:- 变量名:
PULL_REQUEST_ID,值填${detail.pullRequestId} - 变量名:
REPOSITORY_NAME,值填${detail.repositoryNames[0]} - 变量名:
SOURCE_COMMIT,值填${detail.sourceCommit} - 变量名:
DESTINATION_COMMIT,值填${detail.destinationCommit}
配置完成后,这些变量会自动注入到构建环境中,你可以在buildspec里直接引用。
- 变量名:
在buildspec中解析事件变量
如果不想修改CodeBuild项目配置,可以在buildspec的pre_build阶段用jq工具解析CODEBUILD_WEBHOOK_EVENT环境变量(需要确保构建镜像已安装jq,若未安装可先在install阶段执行apt-get install jq -y或yum install jq -y):version: 0.2 phases: install: commands: - yum install jq -y # 针对Amazon Linux镜像 pre_build: commands: - export PULL_REQUEST_ID=$(echo "$CODEBUILD_WEBHOOK_EVENT" | jq -r '.detail.pullRequestId') - export REPOSITORY_NAME=$(echo "$CODEBUILD_WEBHOOK_EVENT" | jq -r '.detail.repositoryNames[0]') - export SOURCE_COMMIT=$(echo "$CODEBUILD_WEBHOOK_EVENT" | jq -r '.detail.sourceCommit') - export DESTINATION_COMMIT=$(echo "$CODEBUILD_WEBHOOK_EVENT" | jq -r '.detail.destinationCommit') build: commands: - # 你的构建命令 - content="构建完成,状态:$CODEBUILD_BUILD_SUCCEEDING" - aws codecommit post-comment-for-pull-request --pull-request-id $PULL_REQUEST_ID --repository-name $REPOSITORY_NAME --before-commit-id $DESTINATION_COMMIT --after-commit-id $SOURCE_COMMIT --content "$content"
权限配置
别忘了给CodeBuild的服务角色添加codecommit:PostCommentForPullRequest权限,否则执行评论命令时会报错。你可以在IAM控制台中给角色添加如下策略片段:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codecommit:PostCommentForPullRequest", "Resource": "arn:aws:codecommit:<区域>:<账号ID>:<你的仓库名>" } ] }
内容的提问来源于stack exchange,提问作者Golam Wasy Arnob
相关产品推荐
相关产品推荐

