在GitLab CI中将环境变量从一个阶段导出到下一个阶段

时间:2017-06-27 07:27:44

标签: environment-variables gitlab gitlab-ci

GitLab CI中有一种方法可以将configure个环境变量从一个阶段转移到下一个阶段吗?我正在寻找类似于job artifacts功能的东西,仅用于环境变量而不是文件。

假设我正在extern "C" { /* Your JNI functions */ } 阶段配置构建,并希望将结果存储为(秘密的,受保护的)环境变量,以供下一阶段使用。我可以保护文件中的配置并将它们存储为工作工件,但是我担心文件中提供的秘密比每个人都可以下载的更多。

4 个答案:

答案 0 :(得分:7)

自Gitlab 13起,您可以像这样inherit environment variables

build:
  stage: build
  script:
    - echo "BUILD_VERSION=hello" >> build.env
  artifacts:
    reports:
      dotenv: build.env

deploy:
  stage: deploy
  script:
    - echo $BUILD_VERSION # => hello
  dependencies:
    - build

注意:您应该首先在Gitlab Rails console中启用此功能:

Feature.enable(:ci_dependency_variables)

答案 1 :(得分:1)

目前还没有此功能,但此主题已有issue

我的建议是将变量保存在文件中并对其进行缓存,因为这些变量无法下载,并且会在完成作业时删除。 如果您想100%确定可以手动删除它。请参阅clean_up阶段。

e.g。

cache:
 paths:
  - save_file

stages: 
 - job_name_1
 - job_name_2
 - clean_up

job_name_1:
 script:
  - (your_task) >> save_file

job_name_2:
 script:
  - cat save_file | do_something_with_content

clean_up:
 script:
  - rm save_file
 when: always 

答案 2 :(得分:1)

您要为此使用Artefacts

stages: 
 - job_name_1
 - job_name_2
 - clean_up

job_name_1:
 script:
  - (your_task) >> save_file
 artifacts:
  paths:
   - save_file
# Hint: You can set an expiration for them too.

job_name_2:
 needs:
  - job: job_name_1
    artifacts: true
 script:
  - cat save_file | do_something_with_content

答案 3 :(得分:-1)

设置-> CI / CD -> 变量,您可以在其中添加敏感的环境。

如果环境是由上一阶段生成的,并且不太敏感,则可以肯定使用工件。 (在这种情况下,所有有权访问该存储库的用户都应该能够下载环境并阅读它们)

在敏感环境是自动生成的情况下,我想某些第三方系统可用于支持生成后的发送环境,并在以后的阶段中获取它们,例如