如何将值传递给来自文件的gitlab管道变量

How to pass values to gitlab pipeline variable sourced from a file

例如我的文件是test.env

test.env has the content

export SAMPLE="true"

我希望在 运行 管道

之前将变量 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'

有没有什么方法可以预先获取变量,然后设置管道变量,以便可以根据这些管道变量执行

目前使用 Gitlab CI 无法提供用作环境变量的文件,至少不能像您所说的那样。但是还有其他一些选择。

首先是获取您在 test.env 文件中拥有的所有单个变量,并将它们存储为单独的秘密变量。您可以通过转到项目设置 -> CI/CD, -> 变量来设置这些。此处定义的环境变量将在该项目的每个管道作业中自动可用(尽管您可以 select Protect Variable 复选框,这只会使变量可用于受保护分支上的管道)。

下一个选项是复制整个 test.env 文件内容,返回项目的秘密变量(如上所述),但这次将变量类型更改为“文件”,然后粘贴文件内容作为价值。当您使用“文件”类型变量时,Gitlab 将在您的每个管道作业中创建一个临时文件(同样,除非您选中“保护变量”选项)。然后该文件的路径将存储为 env 变量,其中包含您 select 编辑的密钥。这将允许您执行 cat $my_file_variable 之类的操作,其计算结果为 cat /path/to/temporary/file,然后 cat 内容。

最后一个最接近您的原始请求的选项是在所有其他需要 test.env 文件的作业之前添加一个作业,如下所示:

stage: env_setup # or whatever
  script:
    - : # this is the bash Null Command that does nothing and always succeeds
  artifacts:
    reports:
      dotenv: test.env

对于这项工作,唯一的目的是将您的 test.env 文件变成环境变量。我们不需要用它做任何其他事情,所以我们对脚本部分使用 Null 命令(因为至少没有 script 部分的作业将失败)。 artifacts 部分是这里的重要内容。 Gitlab 支持一种名为 dotenv 的特殊报告类型,它接受一个参数:文件路径。该文件将像其他任何工件一样作为工件上传,但对于后续作业(或使用 dependencies 关键字和 this 作业名称的作业)而不是将工件拉下来一个文件,test.env中的每一项都会变成一个环境变量,所以你可以像$SAMPLE等那样使用它

我个人更喜欢前两个选项而不是第三个选项,在前两个选项中,第二个选项最简单,因为您只需将现在拥有的文件复制并粘贴到一个变量中即可。第三个选项不理想的原因是它仍然允许您在 git 存储库中拥有敏感变量(如密码),从安全角度来看这并不理想。前两个选项中的任何一个都可以解决这个问题。