如何通过脚本设置 gitlab-ci varibales,而不仅仅是在 .gitlab-ci.yaml 中的“varibales”部分?这样我就可以在一项作业中设置变量并在不同的作业中使用
Iva*_*van 12
目前 GitLab 无法在阶段或作业之间传递环境变量。
但有这样的请求:https ://gitlab.com/gitlab-org/gitlab/-/issues/22638
当前的解决方法是使用工件- 基本上是传递文件。
我们有一个类似的用例 - 从中获取 Java 应用程序版本pom.xml并将其传递给管道中的各个作业。
我们是如何做到的.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 ..."
Run Code Online (Sandbox Code Playgroud)
如果运行脚本,您可以设置环境变量
export MY_VAR=the-value
Run Code Online (Sandbox Code Playgroud)
设置环境变量后,它应该保留在当前环境中。
现在来说说为什么你不想这样做。
像 Gitlab CI 这样的工具旨在实现工件的可重复性。一致性就是这里的问题。如果第二个作业 必须从第一个作业中获取变量,会发生什么情况?那么你就有了多条路!
# CI is a sequence
first -> second -> third -> fourth -> ...
# not a graph
first -> second A -> third ...
\> second B />
Run Code Online (Sandbox Code Playgroud)
你是如何获得第三名的?现在,如果您必须调试第三条路径,您会测试哪条路径?如果第三个构建被破坏,谁负责第二个 A 或第二个 B?
如果您需要一个变量,请立即使用它,而不是稍后在另一个作业/脚本中使用。每当您想要编写更长的命令序列时,请将其作为脚本并执行该脚本!
| 归档时间: |
|
| 查看次数: |
18807 次 |
| 最近记录: |