有没有办法在 gitlab ci 中的自定义变量中使用预定义变量,如下所示:
before_script:
- cat "${$CI_COMMIT_REF_NAME}" >> .env
从
$CI_COMMIT_REF_NAME
中提取分支名称并将其用作自定义变量的名称
更新:
查看 GitLab 14.3(2021 年 9 月)
在其他变量中使用变量
CI/CD 管道执行场景可以依赖于扩展管道中声明的变量或在另一个变量声明中使用 GitLab 预定义变量。
在 14.3 中,我们在 GitLab SaaS 上启用“其他变量中的变量”功能。
现在您可以定义一个变量并在同一管道内的另一个变量定义中使用它。
您还可以在另一个变量声明中使用 GitLab 预定义变量。
此功能简化了管道定义,并消除了因重复变量数据而导致的管道管理问题。
注意 - 对于 GitLab 自我管理用户,该功能默认处于禁用状态。
要使用此功能,您的 GitLab 管理员需要启用 功能标志。(演示 -- 视频)
参见[文档]https://gitlab.com/gitlab-org/gitlab/-/blob/ee8cb300efb6f917eab6d865c9d430eb62077b44/doc/ci/variables/index.md#use-variables-in-other-variables)和问题.
2023 年第 4 季度:文档现在指的是 在其他变量中使用 CI/CD 变量
在其他变量中使用 CI/CD 变量
您可以在其他变量中使用变量:
job: variables: FLAGS: '-al' LS_CMD: 'ls "$FLAGS"' script: - 'eval "$LS_CMD"' # Executes 'ls -al'
在 CI/CD 变量中使用
字符。$
如果您不希望将字符解释为另一个变量的开头,请使用$
代替:$$
job: variables: FLAGS: '-al' LS_CMD: 'ls "$FLAGS" $$TMP_DIR' script: - 'eval "$LS_CMD"' # Executes 'ls -al $TMP_DIR'
防止 CI/CD 变量扩展
GitLab 15.7 中引入。
扩展变量将带有
字符的值视为对另一个变量的引用。$
CI/CD 变量默认扩展。要将带有 $ 字符的变量视为原始字符串,请禁用变量的变量扩展
dba
在评论中提问:
这是否包括或排除使用全局定义的变量?
dba 自己的回答:
全局变量可以被重用,但是它们需要具有递归扩展的
语法(独立于shell)。local_var: ${global_var}
gitlab-org/gitlab-runner
问题1809:
描述
- 在
文件中,用户可以定义变量并在同一.gitlab-ci.yml
文件内的另一个变量定义中使用它。.gitlab-ci.yml
- 用户还可以在变量声明中使用 GitLab 预定义变量。
示例
variables: variable_1: "foo" # here, variable_1 is assigned the value foo variable_2: "${variable_1}" # variable_2 is assigned the value variable_1. # The expectation is that the value in variable_2 = value set for variable_1
如果是,应该在 GitLab 14.1(2021 年 7 月)完成/实现
很多选择。
.env
image: busybox:latest
variables:
MY_CUSTOM_VARIABLE: $CI_JOB_STAGE
ANIMAL_TESTING: "cats"
before_script:
- echo "Before script section"
- echo $CI_JOB_STAGE
- echo $MY_CUSTOM_VARIABLE
- echo $MY_CUSTOM_VARIABLE >> .env
- echo $CI_COMMIT_BRANCH >> .env
- cat .env
$ echo "Before script section"
Before script section
$ echo $CI_JOB_STAGE
build
$ echo $MY_CUSTOM_VARIABLE
build
$ echo $MY_CUSTOM_VARIABLE >> .env
$ echo $CI_COMMIT_BRANCH >> .env
$ cat .env
build
exper/ci-var-into-env
$ echo "Do your build here"
Do your build here
image: busybox:latest
variables:
MY_CUSTOM_VARIABLE: "${CI_JOB_STAGE}"
ANIMAL_TESTING: "cats"
before_script:
- echo "Before script section"
- echo $CI_JOB_STAGE
- echo $MY_CUSTOM_VARIABLE
- echo $MY_CUSTOM_VARIABLE >> .env
- cat .env
示例:https://gitlab.com/codeangler/make-ci-var-custom-var-in-script/-/blob/master/.gitlab-ci.yml