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

GitLab CI如何根据分支是否受保护选择对应Runner?

优化方案:单Job动态选择Runner标签

你可以通过在Job内部结合rules和variables实现动态赋值标签,无需拆分两个重复的Job,具体写法如下:

my-job:
  stage: build
  tags:
    - $RUNNER_TAG
  script: |
    echo "running with $RUNNER_TAG"
  rules:
    - if: $CI_COMMIT_REF_PROTECTED == "true"
      variables:
        RUNNER_TAG: "runner-protected-branches"
    - if: $CI_COMMIT_REF_PROTECTED == "false"
      variables:
        RUNNER_TAG: "runner-feature-branches"

原理说明

  • 借助GitLab CI内置变量CI_COMMIT_REF_PROTECTED判断当前分支是否为受保护分支
  • 通过rules中的variables字段,根据分支状态动态赋值RUNNER_TAG变量
  • Job的tags直接引用该变量,自动匹配对应Runner

全局复用写法:顶层工作流变量赋值

如果多个Job需要共享该逻辑,可在workflow中全局设置变量,所有Job直接复用:

workflow:
  rules:
    - if: $CI_COMMIT_REF_PROTECTED == "true"
      variables:
        RUNNER_TAG: "runner-protected-branches"
    - if: $CI_COMMIT_REF_PROTECTED == "false"
      variables:
        RUNNER_TAG: "runner-feature-branches"

my-job:
  stage: build
  tags:
    - $RUNNER_TAG
  script: |
    echo "running with $RUNNER_TAG"

# 其他需要复用该逻辑的Job直接引用$RUNNER_TAG即可
another-job:
  stage: test
  tags:
    - $RUNNER_TAG
  script: |
    echo "testing with $RUNNER_TAG"

注意事项

  • 确保Runner的标签和你定义的RUNNER_TAG值完全一致
  • CI_COMMIT_REF_PROTECTED的取值是字符串类型的"true"或"false",判断时不要遗漏引号
  • 若需处理标签触发流水线等其他场景,可在rules中补充对应条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:05:04