变量内部变量gitlab ci

问题描述 投票:0回答:3

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

before_script:
  - cat "${$CI_COMMIT_REF_NAME}" >> .env

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

更新:

variables gitlab yaml gitlab-ci
3个回答
11
投票

查看 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 自己的回答:

全局变量可以被重用,但是它们需要具有递归扩展的

local_var: ${global_var}
语法(独立于shell)。


2
投票

检查这是否匹配

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 月)完成/实现


1
投票

很多选择。

但是您可以将预定义的 var 传递到
.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

© www.soinside.com 2019 - 2024. All rights reserved.