我有下面的管道,它是其他人的模板,这就是为什么我想将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
发生only
到predefined
变量。试试这个
TARGET_BRANCH: "master"
MY_VAR: $TARGET_BRANCH
即使填充了TARGET_BRANCH
,MY_VAR
也将显示完全相同的行为,这意味着它在rules
部分中不可用。
基本上,在变量部分,当您将另一个变量分配给一个变量时。适当的扩展只会发生在工作范围内。即脚本部分
在variables
部分中,如果您希望它按您的意愿工作,您需要传递文字字符串,而不是变量