将预定义变量分配给全局变量



我有下面的管道,它是其他人的模板,这就是为什么我想将CI_DEFAULT_BRANCH指定为TARGET_BRANCH的默认值,然后如果需要,可以用其他分支名称(开发、发布等(覆盖它。

前提条件:

项目默认分支是主

管道在主分支上运行

variables:
TARGET_BRANCH: $CI_DEFAULT_BRANCH # The name of the project’s default branch. = master
stages:
- build
build:
stage: build
rules:
- if: '$CI_COMMIT_BRANCH == $TARGET_BRANCH' # CI_COMMIT_BRANCH is master
script:
- echo hello
- 'dir env:'

使用这种方法,作业不包括在管道中,而是像这样更改变量:

TARGET_BRANCH: "master"

将作业添加到管道中。

脚本部分具有在powershell中列出所有变量及其值的命令。在这两种情况下,CI_COMMIT_BRANCH和TARGET_BRANCH都具有值master,但仍遵循第一个场景规则:if似乎不为真。有人能解释一下原因吗?

将预定义变量分配给全局变量

可以。正如您在作业的script子句中看到的那样,您的TARGET_BRANCH变量已成功获取CI_DEFAULT_BRANCH的值。通过在variables部分中分配

但是

问题是where这是可用的。

variables:
TARGET_BRANCH: $CI_DEFAULT_BRANCH

TARGET_BRANCH的值仅在Gitlabjob的范围内为CI_DEFAULT_BRANCH。规则不在此范围内。

这使得not发生onlypredefined变量。试试这个

TARGET_BRANCH: "master"
MY_VAR: $TARGET_BRANCH

即使填充了TARGET_BRANCHMY_VAR也将显示完全相同的行为,这意味着它在rules部分中不可用。

基本上,在变量部分,当您将另一个变量分配给一个变量时。适当的扩展只会发生在工作范围内。即脚本部分

variables部分中,如果您希望它按您的意愿工作,您需要传递文字字符串,而不是变量

最新更新