如何在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"'
关键说明
- 触发逻辑:通过
CI_COMMIT_BRANCH == "main"锁定目标分支,CI_PIPELINE_SOURCE == "push"确保是合并后触发的流水线(而非MR事件)。 - 自动提取JIRA编号:利用
git log $CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA获取本次合并包含的所有提交信息,通过正则匹配提取JIRA工单编号,无需手动硬编码。 - 避免无效提交:添加非空判断,仅在找到有效工单编号时执行空提交操作。
- 权限验证:确保使用的GitLab访问令牌已配置
write_repository权限,允许推送代码到main分支。
内容的提问来源于stack exchange,提问作者user12494839
相关产品推荐
相关产品推荐

