GitLab Pipeline中CI_COMMIT_BRANCH存在时CI_COMMIT_TAG为何为空?
GitLab CI变量互斥问题解析
这是因为GitLab CI的分支推送流水线和标签流水线是两种完全独立的触发场景,变量上下文完全不重叠:
分支推送流水线:当你往仓库推送分支提交时触发,这类流水线只和分支上的提交绑定。此时GitLab不会加载标签相关的上下文,所以
CI_COMMIT_TAG变量根本不存在,只有CI_COMMIT_BRANCH会被设为当前推送的分支名(比如main)。标签流水线:当你用
git push --tags命令或者GitLab界面创建标签时触发,这类流水线只和标签指向的特定提交绑定。因为标签本身可以脱离分支存在(一个标签能指向任意提交,不一定属于某个分支),GitLab触发标签流水线时不会关联具体分支,所以CI_COMMIT_BRANCH变量不存在,只有CI_COMMIT_TAG会被设为当前的标签名。
你写的规则里同时要求CI_COMMIT_BRANCH == "main"和CI_COMMIT_TAG存在,这种情况永远不会发生——这两个变量属于完全不同的流水线场景,不可能同时出现。
内容的提问来源于stack exchange,提问作者eco
相关产品推荐
相关产品推荐

