变量 gitlab ci 中的变量

Posted

技术标签:

【中文标题】变量 gitlab ci 中的变量【英文标题】:Variable inside variable gitlab ci 【发布时间】:2021-07-04 09:54:54 【问题描述】:

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

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

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

更新:

【问题讨论】:

让我们说CI_COMMIT_REF_NAME=production,你想在.env 中有$production 吗? 没错,“production”是在gitlab的“CI/CD Settings -> Variables”中声明的自定义变量的名称。我想在 .env 中拥有哪些值。我已经更新了截图。 【参考方案1】:

查看GitLab 14.3(2021 年 9 月)

在其他变量中使用变量

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

在 14.3 中,我们将在 GitLab SaaS 上启用“其他变量中的变量”功能。

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

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

此功能简化了您的流水线定义并消除了因重复可变数据而导致的流水线管理问题。

注意 - 对于 GitLab 自我管理的用户,该功能默认禁用。 要使用此功能,您的 GitLab 管理员需要启用 feature flag。

(demo -- video)

请参阅 Documentation 和 Issue。

【讨论】:

应该被锁定为正确答案!【参考方案2】:

很多选择。

但是您可以将预定义的 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

示例pipeline output

$ 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

【讨论】:

谢谢,但你误会了我。我所说的自定义变量是指位于 gitlab ci/cd 设置 - > 变量中的那个。我已在我的帖子中附上了屏幕截图。 看来我不明白你想要的结果。 @wspven 可能描述了您要实现的目标,而不是您认为应该如何实现的目标?同时,CI 变量优先级可能会有所帮助docs.gitlab.com/ee/ci/variables/…【参考方案3】:

检查这是否匹配gitlab-org/gitlab-runner issue 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 月)完成/实施

【讨论】:

以上是关于变量 gitlab ci 中的变量的主要内容,如果未能解决你的问题,请参考以下文章

我需要通过 gitlab-ci 中的 ssh 将 env 变量传递给 docker

GitLab 中的 Concat 变量名

如何将 exe 输出分配给 gitlab ci 脚本中的变量?

如何能够将变量传递给 gitlab ci 管道中的规则?

关于gitlab ci在include中使用变量

GitLab CI 使用 API 获取预定义变量?