变量内部变量 gitlab ci

wsp*_*ven 11 variables yaml gitlab gitlab-ci

有没有办法在 gitlab ci 中的自定义变量中使用预定义变量,如下所示:

before_script:
  - cat "${$CI_COMMIT_REF_NAME}" >> .env
Run Code Online (Sandbox Code Playgroud)

从中提取分支名称$CI_COMMIT_REF_NAME并将其用作自定义变量的名称

更新:

在此输入图像描述

Von*_*onC 14

查看GitLab 14.3(2021 年 9 月)

\n
\n

在其他变量中使用变量

\n

CI/CD 管道执行场景可以依赖于扩展管道中声明的变量或在另一个变量声明中使用 GitLab 预定义变量。

\n

在 14.3 中,我们在 GitLab SaaS 上的其他变量\xe2\x80\x9d 功能中启用\xe2\x80\x9c 变量。

\n

现在您可以定义一个变量并在同一管道内的另一个变量定义中使用它

\n

您还可以在另一个变量声明中使用 GitLab 预定义变量。

\n

此功能简化了管道定义,并消除了由于重复变量数据而导致的管道管理问题。

\n

注意 - 对于 GitLab 自我管理用户,该功能默认处于禁用状态。
\n要使用此功能,您的 GitLab 管理员需要启用功能标志

\n

演示 - 视频

\n

演示

\n

请参阅[文档] https://gitlab.com/gitlab-org/gitlab/-/blob/ee8cb300efb6f917eab6d865c9d430eb62077b44/doc/ci/variables/index.md#use-variables-in-other-variables)和问题

\n
\n

2023 年第 4 季度:文档现在提到在其他变量中使用 CI/CD 变量

\n
\n

在其他变量中使用 CI/CD 变量

\n

您可以在其他变量中使用变量:

\n
job:\n variables:\n   FLAGS: \'-al\'\n   LS_CMD: \'ls "$FLAGS"\'\n script:\n   - \'eval "$LS_CMD"\'  # Executes \'ls -al\'\n
Run Code Online (Sandbox Code Playgroud)\n

$在 CI/CD 变量中使用该字符。
\n如果您不希望将该$字符解释为另一个变量的开头,请改用$$

\n
job:\n variables:\n   FLAGS: \'-al\'\n   LS_CMD: \'ls "$FLAGS" $$TMP_DIR\'\n script:\n   - \'eval "$LS_CMD"\'  # Executes \'ls -al $TMP_DIR\'\n
Run Code Online (Sandbox Code Playgroud)\n

防止 CI/CD 变量扩展

\n

在 GitLab 15.7 中引入。

\n

扩展变量将带有该$字符的值视为对另一个变量的引用。
\nCI/CD 变量默认扩展。要将带有 $ 字符的变量视为原始字符串,请禁用该变量的变量扩展

\n
\n
\n

dba在评论中询问

\n
\n

这包括或排除使用全局定义的变量吗?

\n
\n

dba自己的回答:

\n
\n

全局变量可以重复使用,但是需要local_var: ${global_var}具有递归扩展的语法(与 shell 无关)。

\n
\n


cod*_*ler 1

有很多选择。

但是你可以将预定义的变量传递到.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
Run Code Online (Sandbox Code Playgroud)

管道输出示例

$ 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
Run Code Online (Sandbox Code Playgroud)

或者提前传递它。

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
   
Run Code Online (Sandbox Code Playgroud)

示例: https: //gitlab.com/codeangler/make-ci-var-custom-var-in-script/-/blob/master/.gitlab-ci.yml