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

标签 gitlab gitlab-ci gitlab-ci-runner cicd

例如我的文件是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 文件中拥有的所有单独变量,并将它们存储为单独的 secret 变量。您可以通过转到项目的设置,-> CI/CD,-> 变量来设置这些。此处定义的环境变量将在该项目的每个管道作业中自动可用(尽管您可以选择 Protect Variable 复选框,这只会使变量可用于 protected 分支上的管道)。

下一个选项是复制整个 test.env 文件内容,返回到项目的 Secret Variables(如上所述),但这次将 Variable Type 更改为“File”,并且粘贴文件内容作为值。当您使用"file"类型变量时,Gitlab 将在您的每个管道作业中创建一个临时文件(同样,除非您选中“保护变量”选项)。然后,该文件的路径将存储为带有您选择的 key 的环境变量。这将允许您执行诸如 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 存储库中拥有敏感变量(如密码),从安全角度来看这并不理想。前两个选项中的任何一个都可以消除该问题。

关于gitlab - 如何将值传递给来自文件的gitlab管道变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69045140/

相关文章:

Gitlab:抱歉,我们无法自动选择此合并请求

GitLab runner 无法通过 http 克隆存储库

azure - Gitlab CI 无法从项目设置中选择变量

git - Gitlab CI运行程序无法在docker executor上共享构建源

Windows 上的 gitlab-runner 没有获得 .ssh 配置设置

git - 在不克隆的情况下比较两个 Git 分支

kubernetes - 使用来自GitLab的运行器部署到Kubernetes集群

android - 未找到 GitLab CI Android SDK

python - 在 .gitlab-ci.yml 中使用 apt-get 安装 python 包

electron - 错误: ChromeDriver did not start within 5000ms