如何将值从提交传递到GitLab CI管道作为变量?

时间:2019-06-29 13:19:00

标签: variables continuous-integration gitlab gitlab-ci pipeline

我需要将值动态传递给GitLab CI管道,以将值进一步传递给作业。问题是:该值无法存储在代码中,并且不需要重新配置管道(例如,我可以在.gitlab-ci.yml的“变量”部分中传递该值,但这意味着将值存储在代码中,或者更改“ “ CI / CD设置”的“环境变量”部分表示手动重新配置。另外,分支名称也不能用于此目的。

它不是秘密字符串,而是修改管道执行的关键字。 那么,我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

您没有指定此值的来源。

您说“将值从提交传递给...”
如果是有关提交本身的一些元信息,请查看Predefined environment variables
的列表 有很多名为CI_COMMIT_*的变量可能对您有用。

但是, 如果您是在管道中在一项工作中生成的某个价值,并且想要传递给另一项工作,则情况有所不同。 对Pass variables between jobs的请求长期存在,但尚未实现。

此刻的解决方法是使用工件-文件来分阶段在作业之间传递信息。
我们的用例是从pom.xml中提取Java应用程序版本,并在以后将其传递给某些打包工作。
这是我们在.gitlab-ci.yml中的处理方式:

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

...

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