如何在GitLab CI/CD中获取分支名称?Tag触发场景变量失效
解决Tag触发GitLab CI流水线获取分支名的问题
你的场景是Tag触发的流水线,此时GitLab默认不会填充$CI_COMMIT_BRANCH变量,$CI_COMMIT_REF_NAME返回的是Tag名称而非分支名。可以通过Git命令直接从仓库中查询Tag对应Commit关联的分支,具体实现如下:
修改后的CI配置
simple build : stage: build script: # 获取当前Tag对应Commit所属的分支(取第一个匹配结果) - COMMIT_BRANCH=$(git branch --contains $CI_COMMIT_SHA | grep -v HEAD | sed 's/^\* //' | head -n 1) - echo "关联分支名称: $COMMIT_BRANCH" rules : - if: $CI_COMMIT_TAG
命令细节解释
git branch --contains $CI_COMMIT_SHA:列出所有包含当前Tag对应Commit的分支(Tag绑定在某个Commit上,该Commit必然属于至少一个分支)grep -v HEAD:过滤掉无关的HEAD引用结果sed 's/^\* //':移除分支名前的*标记(当前检出的分支会带有这个标记)head -n 1:如果同一个Commit被多个分支包含,仅取第一个匹配的分支(可根据需求调整此逻辑)
额外说明
- 确保CI运行环境已安装
git、grep、sed工具,GitLab官方Runner镜像默认都包含这些工具 - 如果你的Tag是在无分支的孤立Commit上创建的,此方法会找不到分支(但这种场景很少见)
内容的提问来源于stack exchange,提问作者eby64
相关产品推荐
相关产品推荐

