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

如何在GitLab合并MR时添加空提交以触发Jira工单状态更新

解决方案

问题1:获取MR分支名称

在GitLab的MR事件流水线中,CI_COMMIT_BRANCH变量不生效,需使用MR专属的环境变量:

  • CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:MR的源分支名称
  • CI_MERGE_REQUEST_TARGET_BRANCH_NAME:MR的目标分支名称

替换脚本中的分支打印命令即可:

echo $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME

问题2:MR合并到main时触发空提交

当前规则会在MR创建/更新时触发流水线,不符合「合并到main后执行」的需求。需调整触发逻辑,并自动提取JIRA工单编号,避免硬编码。

优化后的CI/CD作业配置

add-empty-commit:
  stage: empty-commit
  script:
    # 配置Git提交用户信息
    - git config --global user.name "john.doe"
    - git config --global user.email "john.doe@gmail.fi"
    # 拉取main分支最新代码
    - git fetch origin main
    - git checkout main
    - git pull origin main
    # 从合并提交的历史中提取JIRA工单编号(匹配JIRA-XXXX格式)
    - JIRA_TICKET=$(git log $CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA --pretty=format:"%s" | grep -oE 'JIRA-[0-9]+' | head -1)
    # 仅当找到有效工单编号时创建空提交
    - if [ -n "$JIRA_TICKET" ]; then
        git commit --allow-empty -m "Fixes $JIRA_TICKET";
        # 推送空提交到main分支
        git push "https://project_access_token_name:$GITLAB_API_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git" main;
      else
        echo "未检测到JIRA工单编号,跳过空提交操作";
      fi
  rules:
    # 仅在main分支的合并推送流水线中触发
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'

关键说明

  1. 触发逻辑:通过CI_COMMIT_BRANCH == "main"锁定目标分支,CI_PIPELINE_SOURCE == "push"确保是合并后触发的流水线(而非MR事件)。
  2. 自动提取JIRA编号:利用git log $CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA获取本次合并包含的所有提交信息,通过正则匹配提取JIRA工单编号,无需手动硬编码。
  3. 避免无效提交:添加非空判断,仅在找到有效工单编号时执行空提交操作。
  4. 权限验证:确保使用的GitLab访问令牌已配置write_repository权限,允许推送代码到main分支。

内容的提问来源于stack exchange,提问作者user12494839

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:03:09