如何在GitLab Pipeline中检查API调用的JSON响应并执行后续操作
在GitLab Pipeline中基于API响应触发后续操作
需求:在create_merge_request阶段检查创建合并请求的API响应,获取合并请求ID后执行合并操作,无需依赖外部工具,直接在GitLab Pipeline内完成。
优化后的多阶段CI配置
stages: - create_branch - create_merge_request - merge_merge_request create_branch: stage: create_branch script: - git checkout -b new-feature-branch - git push origin new-feature-branch only: - master create_merge_request: stage: create_merge_request script: - | # 调用API创建合并请求并捕获响应 MR_RESPONSE=$(curl --request POST --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ --data "source_branch=new-feature-branch&target_branch=master&title=New Feature" \ "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/merge_requests") # 从响应中提取MR ID并写入文件 echo "$MR_RESPONSE" | jq '.id' > mr_id.txt # 验证合并请求是否创建成功 if [ -z "$(cat mr_id.txt)" ]; then echo "合并请求创建失败" exit 1 fi artifacts: paths: - mr_id.txt expire_in: 1 hour only: - master needs: - create_branch merge_merge_request: stage: merge_merge_request script: - | # 从传递的工件中读取MR ID MR_ID=$(cat mr_id.txt) # 调用API触发合并,设置流水线成功后自动合并 curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ --data "merge_when_pipeline_succeeds=true" \ "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/merge_requests/$MR_ID/merge" only: - master needs: - create_merge_request
关键改进点
- 直接捕获MR ID:在创建合并请求的阶段直接从API响应提取ID,通过GitLab的
artifacts机制传递给后续阶段,避免重复查询API,更高效且可靠。 - 增加有效性校验:检查提取的MR ID是否为空,若为空则终止流水线,防止后续阶段执行无效操作。
- 简化合并阶段逻辑:直接读取传递的MR ID,无需再次调用查询接口。
可选:单阶段完成创建与合并
如果不需要拆分阶段,也可以在同一个步骤内完成创建和合并操作:
stages: - create_branch - create_and_merge_mr create_branch: stage: create_branch script: - git checkout -b new-feature-branch - git push origin new-feature-branch only: - master create_and_merge_mr: stage: create_and_merge_mr script: - | # 创建合并请求并获取响应 MR_RESPONSE=$(curl --request POST --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ --data "source_branch=new-feature-branch&target_branch=master&title=New Feature" \ "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/merge_requests") MR_ID=$(echo "$MR_RESPONSE" | jq '.id') # 验证合并请求创建成功 if [ -z "$MR_ID" ]; then echo "合并请求创建失败" exit 1 fi # 触发合并操作 curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ --data "merge_when_pipeline_succeeds=true" \ "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/merge_requests/$MR_ID/merge" only: - master needs: - create_branch
内容的提问来源于stack exchange,提问作者Advik Mehta
相关产品推荐
相关产品推荐

