如何动态设置gitlab-ci变量?

时间:2020-04-18 09:47:40

标签: gitlab-ci

如何通过脚本设置gitlab-ci变量,而不仅仅是在.gitlab-ci.yaml的“变量”部分中?这样我就可以在一个作业中设置变量并在其他作业中使用

2 个答案:

答案 0 :(得分:1)

GitLab当前无法在阶段或作业之间传递环境变量。

但是有一个要求:https://gitlab.com/gitlab-org/gitlab/-/issues/22638

当前解决方法是使用工件-基本是传递文件。
我们有一个类似的用例-从pom.xml获取Java应用程序版本,并将其传递给管道中稍后的各种作业。

我们如何在.gitlab-ci.yml中做到这一点:

stages:
  - prepare
  - package

variables:
  VARIABLES_FILE: ./variables.txt  # "." is required for image that have sh not bash

get-version:
  stage: build
  script:
    - APP_VERSION=...
    - echo "export APP_VERSION=$APP_VERSION" > $VARIABLES_FILE
  artifacts:
    paths:
      - $VARIABLES_FILE
package:
  stage: package
  script:
    - source $VARIABLES_FILE
    - echo "Use env var APP_VERSION here as you like ..."

答案 1 :(得分:0)

如果运行脚本,则可以设置环境变量

export MY_VAR=the-value

设置了环境变量后,它应该在当前环境中持续存在。

现在,为什么您不想想要这样做。

像Gitlab CI这样的工具旨在实现您的重复性 文物。一致性是这里的问题。如果第二份工作会怎样 要从第一个中提取一个变量吗?然后,您有多个路径!

# CI is a sequence
first -> second -> third -> fourth -> ...

# not a graph

first -> second A -> third ...
     \> second B />

您如何获得第三名?现在,如果您必须调试第三条,则要测试哪个路径?如果第三个内置物坏了,谁负责第二个A或第二个B?

如果您需要一个变量,请立即使用它,以后不要在其他作业/脚本中使用它。每当你 想要编写更长的命令序列使其成为脚本并执行脚本!