我有一项工作是在创建标签时创建一个版本,但我还需要一个规则,仅允许它在为主分支创建标签时创建版本。我不确定我需要为此做什么?
我已经尝试过这个规则,但是这在管道中失败了,因为这个命令由于某种原因阻止它运行。
rules:
- if: $CI_COMMIT_TAG && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
您对标签的工作原理存在误解。请阅读这个优秀的答案以获得完整的解释,但这里有一个片段:
重要的是要了解标签与分支没有直接关系 - 它们仅标识提交。
因此,当创建标签时,即使对于一个分支,它也不是真正为该分支创建,而是作为对该分支中最新的 commit 的引用。这也是为什么GitLab 文档提到这些:
CI_COMMIT_TAG
CI_COMMIT_BRANCH
也许您不想确定标签的提交在主分支中是否可用?理论上,这样的东西可能会有所帮助:
Git:如何找出标签所在的分支?,但是你不能在 GitLab if 子句中运行任意 git 操作。 并不理想,但最好的选择可能是在脚本中进行检查,并在未为主分支中存在的提交创建标签的情况下使作业失败:
script:
- |
if [[ -z $(git branch --list $CI_DEFAULT_BRANCH --contains tags/$CI_COMMIT_TAG) ]]; then
exit 1
fi