Sou*_*awe 4 gitlab gitlab-ci gitlab-ci-runner cicd
例如我的文件是 test.env
test.env has the content
export SAMPLE="true"
Run Code Online (Sandbox Code Playgroud)
我希望在运行管道之前将变量 SAMPLE 设置为管道变量
我正在尝试下面提到的解决方案,但它并没有真正帮助
before_script:
- git clone test.env
- source test.env
stages:
- publish
test:
stage: publish
trigger:
project: test_pipeline
branch: master
strategy: depend
only:
variables:
- $SAMPLE == 'True'
Run Code Online (Sandbox Code Playgroud)
有没有办法预先获取变量,然后设置管道变量,以便可以根据这些管道变量执行
目前,Gitlab CI 无法提供用作环境变量的文件,至少不能按照您所说的方式。不过,还有其他一些选择。
\n首先是获取test.env
文件中的所有单独变量并将它们存储为单独的秘密变量。您可以通过转到项目的设置 -> CI/CD -> 变量来设置这些。此处定义的环境变量将自动在该项目的每个管道作业中可用(尽管您可以选中该Protect Variable
复选框,这只会使该变量可用于受保护分支上的管道)。
下一个选项是复制整个test.env
文件内容,返回到您的项目\xe2\x80\x99s Secret Variables(如上所述),但这次将变量类型更改为“File”,并将文件内容粘贴为值。当您使用“文件”类型变量时,Gitlab 将在每个管道作业中创建一个临时文件(同样,除非您选中“保护变量”选项)。然后该文件的路径将使用您选择的键存储为环境变量。这将允许您执行诸如 之类的操作cat $my_file_variable
,它将评估为cat /path/to/temporary/file
,然后 cat 内容。
test.env
最接近您原始请求的最后一个选项是在需要如下文件的所有其他作业之前添加一个作业:
stage: env_setup # or whatever\n script:\n - : # this is the bash Null Command that does nothing and always succeeds\n artifacts:\n reports:\n dotenv: test.env\n
Run Code Online (Sandbox Code Playgroud)\n对于这项工作,唯一的目的是将您的test.env
文件变成环境变量。我们不需要用它做任何其他事情,因此我们对脚本部分使用 Null 命令(因为至少没有该script
部分的作业将会失败)。该artifacts
部分是这里的重要内容。Gitlab 支持一种名为“Report”的特殊报告类型dotenv
,它采用单个参数:文件的路径。该文件将像任何其他文件一样作为工件上传,但对于后续作业(或使用带有此dependencies
作业名称的关键字的作业),而不是将工件作为文件下拉,其中的每个项目都将转换为环境变量,因此你可以像这样使用它test.env
$SAMPLE
你可以像这样
就我个人而言,我更喜欢前两个选项而不是第三个,在前两个选项中,第二个是最简单的,因为您只需将现在的文件复制并粘贴到变量中即可。第三个选项不理想的原因是它仍然允许您在 git 存储库中拥有敏感变量(例如密码),从安全角度来看这并不理想。前两个选项中的任何一个都可以消除该问题。
\n 归档时间: |
|
查看次数: |
12202 次 |
最近记录: |