Bas*_*hur 18 environment-variables gitlab gitlab-ci
有没有办法export
在 GitLab CI 中将环境变量从一个阶段转移到下一个阶段?我正在寻找类似于作业工件功能的东西,仅适用于环境变量而不是文件。
假设我正在一个configure
阶段配置构建,并希望将结果存储为(秘密的、受保护的)环境变量以供下一个阶段使用。我可以保护文件中的配置并将它们存储为作业工件,但我担心文件中提供的秘密可以供所有人下载。
fol*_*ell 20
尽管这并不完全是您想要的,因为它使用了artifacts:reports:dotenv
工件,但 GitLab 建议在其指南中执行以下操作:“将环境变量传递给另一个作业”:
build:
stage: build
script:
- echo "BUILD_VERSION=hello" >> build.env
artifacts:
reports:
dotenv: build.env
deploy:
stage: deploy
script:
- echo "$BUILD_VERSION" # Output is: 'hello'
needs:
- job: build
artifacts: true
Run Code Online (Sandbox Code Playgroud)
我相信使用关键字比关键字(如hd-deman 的最佳答案中使用的)needs
更好,因为:dependencies
当作业使用 时
needs
,默认情况下它不再下载先前阶段的所有工件,因为有需求的作业可以在早期阶段完成之前启动。您只能needs
从配置中列出的作业下载工件needs:
。
build
此外,您可以通过将的artifacts:expire_in
时间设置得非常小来最小化风险。
hd.*_*man 16
从 Gitlab 13 开始,您可以像这样继承环境变量:
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
Run Code Online (Sandbox Code Playgroud)
注意:对于 GitLab < 13.1,您应该首先在Gitlab Rails 控制台中启用它:
Feature.enable(:ci_dependency_variables)
Run Code Online (Sandbox Code Playgroud)
不,此功能尚不存在,但此主题已存在问题。
我的建议是,您将变量保存在文件中并缓存它们,因为这些将不可下载,并且会在工作完成后被删除。如果您想 100% 确定您可以手动删除它。看clean_up
舞台。
例如
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21327 次 |
最近记录: |