You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab合并MR后触发任务并获取对应MR的IID?

可靠实现方案

方法一:通过GitLab API关联合并提交与对应MR

合并到main分支的提交必然和对应的MR关联,因此可以利用CI_COMMIT_SHA调用GitLab API查询关联的MR,进而获取IID和MR描述中的Trello卡片ID,步骤如下:

  1. 配置GitLab访问令牌
    在项目的「设置」→「CI/CD」→「变量」中添加GITLAB_ACCESS_TOKEN,权限需包含api(用于查询MR信息)。

  2. 修改流水线配置
    更新你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:03:27