如何动态设置gitlab ci变量



如何通过脚本设置gitlab-ci.yaml中的"varibales"部分之外的gitlab-ci-varibales?这样我就可以在一个作业中设置变量,并在不同的作业中使用

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 ..."

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

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?

如果您需要一个变量,请立即使用它,而不是稍后在另一个作业/脚本中使用。无论何时想要编写更长的命令序列,请将其作为脚本并执行脚本!

您可以使用Artifact或Cache来实现这一点,有关Artifact和Cache的更多信息,请参阅官方文档:

https://docs.gitlab.com/ee/ci/caching/#how-缓存与工件不同

最新更新