如何将所有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和类似文件中列出所有变量,但是在一些项目中我们已经有很多变量了,所以这不是解决方案。
答案 0 :(得分:0)
您需要在脚本中添加下一个命令
script:
...
# Read certificate stored in $KUBE_CA_PEM variable and save it in a new file
- echo "$KUBE_CA_PEM" > variables.env
...