【问题标题】:Merging a merge request with API and waiting for its pipeline to finish in Gitlab Ci将合并请求与 API 合并并等待其管道在 Gitlab Ci 中完成
【发布时间】:2022-11-07 21:08:06
【问题描述】:
我正在尝试编写一个 ci.yml 来自动创建一个合并请求并将其合并并等待管道成功。为此,我需要合并请求的管道 ID。但是我从合并调用的响应中收到的唯一管道 ID 是 .head_pipeline.id ,它是项目的最后一个管道 ID,而不是合并后的管道 ID。
我需要实际的管道 ID 来轮询状态。如果状态为“成功”,则作业将结束。
我努力了 :
`
PIPELINE_ID=`curl --silent -X PUT "${GITLAB_BASE_URL}/${SERVICE_PROJECT_ID}/merge_requests/${MERGE_REQUEST_IID}/merge" --header "Private-Token: ${PRIVATE_TOKEN}" --header "Content-Type: application/json" | jq .head_pipeline.id`
`
【问题讨论】:
标签:
gitlab
gitlab-ci
gitlab-api
【解决方案1】:
这是我找到的解决方案。合并后,我们可以在 rspBody 中找到“merge_commit_sha”作为属性。那么我们应该获取所有管道并找到与该属性匹配的管道。
MERGE_COMMIT_SHA=`curl --silent -X GET "${GITLAB_BASE_URL}/${SERVICE_PROJECT_ID}/merge_requests/${MERGE_REQUEST_IID}" --header "Private-Token: ${PRIVATE_TOKEN}" --header "Content-Type: application/json" | jq -r .merge_commit_sha`
PIPELINE_ID=$(curl --silent -X GET "${GITLAB_BASE_URL}/${SERVICE_PROJECT_ID}/pipelines" --header "Private-Token: ${PRIVATE_TOKEN}" | jq '.[] | select(.ref=='"$TARGET_BRANCH"') | select (.sha=='"$MERGE_COMMIT_SHA"') | .id')