如何将gitlab ci环境变量转储到文件

时间:2020-05-05 12:38:46

标签: gitlab environment-variables gitlab-ci gitlab-ci-runner

问题

如何将所有Gitlab CI环境变量(具有在项目或组CI / CD设置中设置的变量)转储到文件中,而仅转储到文件中,而不转储执行gitlab运行程序的主机的环境变量?

背景

我们正在使用gitlab CI / CD将项目部署到docker服务器。每个项目都包含一个docker-compose.yml文件,该文件使用各种环境变量,例如db密码。我们正在使用.env文件来存储此变量,因此可以在从命令行部署后启动/重新启动容器,而无需访问gitlab。

我们的部署脚本如下所示:

deploy: 
  script:
    #...
    - cp docker-compose.development.yml {$DEPLOY_TO_PATH}/docker-compose.yml
    - env > variables.env
    - docker-compose up -d 
    #...

docker-compose.yml文件如下:

version: "3"
services:
  project:
    image: some/image
    env_file:
      - variables.env
    ...

现在的问题是.env文件既包含gitlab变量,又包含系统环境变量,结果 PATH变量被覆盖

我使用grep开发了一种解决方法:

env | grep -Pv "^PATH" > variables.env

它使我们现在可以继续工作,但是我认为问题可能再次通过另一个变量在容器和主机系统上被设置为不同的值。

我知道我可以在docker-compose和类似文件中列出所有变量,但是在一些项目中我们已经有很多变量了,所以这不是解决方案。

1 个答案:

答案 0 :(得分:0)

您需要在脚本中添加下一个命令

script:
  ...
  # Read certificate stored in $KUBE_CA_PEM variable and save it in a new file
  - echo "$KUBE_CA_PEM" > variables.env
  ...