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

GitLab CI:如何在Job的rules中使用workflow定义的变量?

问题原因

GitLab CI 在解析 Job 的 rules 条件时,全局 variables 块中定义的变量不会自动展开到 if 表达式里。你的第二个 Job 条件里的 $GOOGLE_PLAY_TRACK_NAME_PRODUCTION 会被当作字符串字面量(即 "$GOOGLE_PLAY_TRACK_NAME_PRODUCTION"),而不是它的实际值 "production",所以对比$GOOGLE_PLAY_DEPLOYMENT_TRACK == $GOOGLE_PLAY_TRACK_NAME_PRODUCTION 实际是 "production" == "$GOOGLE_PLAY_TRACK_NAME_PRODUCTION",结果不成立,Job 不会被调度。

解决方法

有两种可靠的解决方式:

方式一:将全局变量移至 workflow 层级

把全局变量放到 workflow 的 variables 块中,这样所有变量都属于流水线初始化阶段定义的上下文,rules 的 if 条件能正确解析变量值:

workflow:
  variables:
    GOOGLE_PLAY_TRACK_NAME_PRODUCTION: "production"
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      variables:
        GOOGLE_PLAY_DEPLOYMENT_TRACK: $GOOGLE_PLAY_TRACK_NAME_PRODUCTION

stages:
  - setup

this-runs:
  stage: setup
  image: python:3.13.3
  script:
    - echo $GOOGLE_PLAY_DEPLOYMENT_TRACK
    - echo $GOOGLE_PLAY_TRACK_NAME_PRODUCTION
  rules:
    - if: $GOOGLE_PLAY_DEPLOYMENT_TRACK

this-should-run:
  stage: setup
  image: python:3.13.3
  script:
    - echo $GOOGLE_PLAY_DEPLOYMENT_TRACK
    - echo $GOOGLE_PLAY_TRACK_NAME_PRODUCTION
  rules:
    - if: $GOOGLE_PLAY_DEPLOYMENT_TRACK == $GOOGLE_PLAY_TRACK_NAME_PRODUCTION

方式二:在条件中使用 CI_VARIABLES 访问全局变量

如果不想移动全局变量的位置,可以用 GitLab 提供的 $CI_VARIABLES["变量名"] 语法,在 if 条件中直接获取全局变量的实际值:

variables:
  GOOGLE_PLAY_TRACK_NAME_PRODUCTION: "production"

workflow:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      variables:
        GOOGLE_PLAY_DEPLOYMENT_TRACK: $GOOGLE_PLAY_TRACK_NAME_PRODUCTION

stages:
  - setup

this-runs:
  stage: setup
  image: python:3.13.3
  script:
    - echo $GOOGLE_PLAY_DEPLOYMENT_TRACK
    - echo $GOOGLE_PLAY_TRACK_NAME_PRODUCTION
  rules:
    - if: $GOOGLE_PLAY_DEPLOYMENT_TRACK

this-should-run:
  stage: setup
  image: python:3.13.3
  script:
    - echo $GOOGLE_PLAY_DEPLOYMENT_TRACK
    - echo $GOOGLE_PLAY_TRACK_NAME_PRODUCTION
  rules:
    - if: $GOOGLE_PLAY_DEPLOYMENT_TRACK == $CI_VARIABLES["GOOGLE_PLAY_TRACK_NAME_PRODUCTION"]

以上两种方式都能让第二个 Job 的条件判断生效,部署到 main 分支时两个 Job 都会正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:25