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
相关产品推荐
相关产品推荐

