为什么 Gitlab CICD workflow:rules:if:variables 设置变量失败?
Why is Gitlab CICD workflow:rules:if:variables failing to set variables?
stages:
- test
# Default vars
variables:
DEPLOY_VARIABLE: "dev-deploy"
workflow:
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables:
DEPLOY_VARIABLE: "master-deploy" # Override globally-defined DEPLOY_VARIABLE
my_project_test:
stage: test
script:
- env | grep CI
- echo $DEPLOY_VARIABLE // this always outputs dev-deploy.
运行 gitlab-运行ner 14.10.1.
无论我是在本地还是在 Gitlab 上尝试,都不会设置 var。
在本地我 运行 它与 gitlab-runner exec shell my_project_test
。
env | grep CI
是:
CI_SERVER_VERSION=
CI_RUNNER_EXECUTABLE_ARCH=darwin/amd64
CI_COMMIT_REF_NAME=master
CI_JOB_TOKEN=
CI_PROJECT_ID=0
CI_RUNNER_REVISION=f761588f
... etc
根据他们的文档:
如果规则匹配,when: always 是默认值,when: never 是默认值,如果没有匹配项。
我什至试过if: '1 == 1'
等等。
如果您将条件放入任务中,作业应该有效。
my_project_test:
stage: test
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables:
DEPLOY_VARIABLE: "master-deploy" # Override globally-defined DEPLOY_VARIABLE
script:
- env | grep CI
- echo $DEPLOY_VARIABLE // this always outputs dev-deploy.
但是变量只在你的工作范围内,在你的if条件下,它不会覆盖另一个工作中的全局值。
在作业之间传递变量的真正需要:
gitlab-runner exec
具有 several limitations 而没有 implement/consider 许多 YAML 定义的特征,在这种情况下包括 workflow:rules:[]variables
。
但是,when run through gitlab.com 或 GitLab 的 self-hosted 实例,workflow:rules:
将正确评估。
请记住,在某些情况下,在其他地方设置的变量会 take precedence 覆盖 YAML 中定义的变量,例如在项目、组或实例设置中设置变量。
stages:
- test
# Default vars
variables:
DEPLOY_VARIABLE: "dev-deploy"
workflow:
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables:
DEPLOY_VARIABLE: "master-deploy" # Override globally-defined DEPLOY_VARIABLE
my_project_test:
stage: test
script:
- env | grep CI
- echo $DEPLOY_VARIABLE // this always outputs dev-deploy.
运行 gitlab-运行ner 14.10.1.
无论我是在本地还是在 Gitlab 上尝试,都不会设置 var。
在本地我 运行 它与 gitlab-runner exec shell my_project_test
。
env | grep CI
是:
CI_SERVER_VERSION=
CI_RUNNER_EXECUTABLE_ARCH=darwin/amd64
CI_COMMIT_REF_NAME=master
CI_JOB_TOKEN=
CI_PROJECT_ID=0
CI_RUNNER_REVISION=f761588f
... etc
根据他们的文档: 如果规则匹配,when: always 是默认值,when: never 是默认值,如果没有匹配项。
我什至试过if: '1 == 1'
等等。
如果您将条件放入任务中,作业应该有效。
my_project_test:
stage: test
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
variables:
DEPLOY_VARIABLE: "master-deploy" # Override globally-defined DEPLOY_VARIABLE
script:
- env | grep CI
- echo $DEPLOY_VARIABLE // this always outputs dev-deploy.
但是变量只在你的工作范围内,在你的if条件下,它不会覆盖另一个工作中的全局值。
在作业之间传递变量的真正需要:
gitlab-runner exec
具有 several limitations 而没有 implement/consider 许多 YAML 定义的特征,在这种情况下包括 workflow:rules:[]variables
。
但是,when run through gitlab.com 或 GitLab 的 self-hosted 实例,workflow:rules:
将正确评估。
请记住,在某些情况下,在其他地方设置的变量会 take precedence 覆盖 YAML 中定义的变量,例如在项目、组或实例设置中设置变量。