You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI单阶段判断分支是否为tag并执行对应命令的方法

单作业内判断tag触发并执行对应命令的实现

GitLab CI提供了内置预定义变量CI_COMMIT_TAG:流水线由tag触发时,该变量值为对应tag的名称;普通分支、合并请求触发时,该变量为空值。你不需要拆分多个作业,直接在同一个作业的script块中通过shell条件判断即可分流执行不同命令。

基础配置示例

# 替换为你实际的作业名
deploy_job:
  stage: deploy  # 替换为你实际归属的stage名称
  # 不要配置only: tags,保证作业在分支、tag触发时都能进入执行逻辑
  script:
    # 核心判断逻辑
    - |
      if [ -n "$CI_COMMIT_TAG" ]; then
        echo "Tag触发流水线,当前Tag为:$CI_COMMIT_TAG"
        # 以下放Tag场景需要执行的命令集
        # echo "执行正式版本构建发布"
        # docker build -t registry.example.com/app:$CI_COMMIT_TAG .
        # docker push registry.example.com/app:$CI_COMMIT_TAG
      else
        echo "普通分支触发流水线,当前分支为:$CI_COMMIT_BRANCH"
        # 以下放非Tag场景需要执行的命令集
        # echo "执行开发版本构建测试"
        # docker build -t registry.example.com/app:dev-$CI_COMMIT_SHORT_SHA .
        # ./run-test.sh
      fi

特殊场景适配

  • 如果你的作业运行在Windows PowerShell环境的Runner上,把判断逻辑替换为PowerShell语法即可:
deploy_job_win:
  stage: deploy
  tags:
    - windows
  script:
    - |
      if ($env:CI_COMMIT_TAG) {
        Write-Host "Tag触发,执行正式发布逻辑"
        # Tag场景命令
      } else {
        Write-Host "普通分支触发,执行测试构建逻辑"
        # 非Tag场景命令
      }
  • 如果需要前置过滤触发条件,比如只允许main分支和所有Tag触发该作业,可以搭配rules配置使用,避免其他分支触发无意义的作业运行:
deploy_job:
  stage: deploy
  rules:
    - if: '$CI_COMMIT_TAG'
    - if: '$CI_COMMIT_BRANCH == "main"'
  script:
    # 和前面的判断逻辑一致即可
    - |
      if [ -n "$CI_COMMIT_TAG" ]; then
        # Tag命令集
      else
        # main分支命令集
      fi

内容的提问来源于stack exchange,提问作者M.M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:39:42