如何在GitLab合并MR后触发任务并获取对应MR的IID?
可靠实现方案
方法一:通过GitLab API关联合并提交与对应MR
合并到main分支的提交必然和对应的MR关联,因此可以利用CI_COMMIT_SHA调用GitLab API查询关联的MR,进而获取IID和MR描述中的Trello卡片ID,步骤如下:
配置GitLab访问令牌
在项目的「设置」→「CI/CD」→「变量」中添加GITLAB_ACCESS_TOKEN,权限需包含api(用于查询MR信息)。修改流水线配置
更新你的move-card-to-done任务,加入API查询逻辑:
move-card-to-done: stage: trello image: $MY_TRELLO_INTEGRATION_IMAGE tags: - docker only: - main when: on_success script: # 查询当前提交关联的已合并MR - MR_RESPONSE=$(curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/merge_requests?state=merged&commit_sha=$CI_COMMIT_SHA") # 提取MR的IID(假设只有一个关联MR,符合常规合并场景) - MR_IID=$(echo "$MR_RESPONSE" | jq -r '.[0].iid') # 获取该MR的描述信息 - MR_DESCRIPTION=$(curl --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/merge_requests/$MR_IID" | jq -r '.description') # 从MR描述中提取Trello卡片ID(假设格式为Trello: [card-id],可根据实际调整正则) - TRELLO_CARD_ID=$(echo "$MR_DESCRIPTION" | grep -oP 'Trello: \K[a-zA-Z0-9]+') # 调用移动卡片脚本 - moveCardToList $DONE_LIST_ID $TRELLO_CARD_ID
注:需要确保镜像中包含
curl和jq工具,若没有需提前安装(比如apt-get update && apt-get install -y curl jq)。
方法二:强制在合并提交信息中嵌入MR标识(备选)
如果不想依赖API,可以通过GitLab的合并设置强制提交信息包含MR IID:
- 在项目「设置」→「合并请求」→「合并提交信息模板」中设置模板,例如:
Merge !%{iid} into main - 这样合并后的
CI_COMMIT_MESSAGE会固定包含!MR_IID格式的内容,脚本中用正则提取即可:
- MR_IID=$(echo "$CI_COMMIT_MESSAGE" | grep -oP '!\K\d+')
但此方法依赖用户不修改默认的合并提交信息,可靠性略低于API方案。
内容的提问来源于stack exchange,提问作者eduter
相关产品推荐
相关产品推荐

