如何仅在主分支创建标签时运行GitLab-CI发布任务?
GitLab-CI 主分支标签触发发布任务的正确配置
你的规则失效的核心原因:GitLab在标签流水线中不会设置
$CI_COMMIT_BRANCH变量,所以$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH这个条件永远无法满足,导致流水线无法触发。以下是几种可行的解决方案:
方案1:严格校验标签来自主分支(最准确)
先触发所有标签流水线,再在脚本中验证当前标签对应的提交是否存在于主分支:
rules: - if: $CI_COMMIT_TAG script: # 拉取主分支最新代码 - git fetch origin $CI_DEFAULT_BRANCH # 检查当前标签的提交是否属于主分支,不属于则直接终止 - git branch --contains $CI_COMMIT_SHA | grep -q $CI_DEFAULT_BRANCH || exit 1 # 在此处编写你的发布操作命令
方案2:利用受保护分支特性(适合主分支为受保护分支的场景)
如果主分支是受保护分支,且仅允许从受保护分支创建的标签触发发布,可使用此规则:
rules: - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true" script: # 在此处编写你的发布操作命令
方案3:通过标签前缀过滤(适合有统一标签规范的场景)
如果发布标签有固定前缀(如v1.0.0这类以v开头的版本标签),可直接匹配前缀:
rules: - if: $CI_COMMIT_TAG =~ /^v/ script: # 在此处编写你的发布操作命令
注意:若必须确保标签一定从主分支创建,优先选择方案1,方案2和3可能存在边缘触发的情况(比如方案2中其他受保护分支创建的标签也会触发流水线)。
内容的提问来源于stack exchange,提问作者RedishLibrary
相关产品推荐
相关产品推荐

