You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab流水线中遍历所有流水线变量以生成.env文件?

问题

我正尝试部署Docker镜像,希望创建包含所有环境变量的.env文件,请问是否有办法遍历GitLab流水线中的所有变量?

对应的.gitlab-ci.yaml配置如下:

variables:
  DOCKER_DRIVER: overlay2
  SECURE_FILES_DOWNLOAD_PATH: './secure_files'
  PROJECT_NAME: magicfeedback/django
  ...
build:
  stage: build
  script:
    for variable in ${variables}
    do
      echo "$variable" >> .env
      echo "export $variable" >> .env_export
    done
解决方案

你原来的脚本里用${variables}是无效的,GitLab CI并没有提供这样一个直接包含所有变量的集合。要遍历并导出所有环境变量,最直接的方式是用env命令——它会输出当前Shell环境中所有KEY=VALUE格式的变量,刚好匹配.env文件的格式。

基础实现

直接通过env命令生成所需文件:

build:
  stage: build
  script:
    # 生成标准.env文件
    env > .env
    # 生成带export前缀的.env_export文件
    env | sed 's/^/export /' > .env_export

过滤无关变量

如果不需要GitLab内置的CI_开头变量或系统变量,可以用grep过滤:

build:
  stage: build
  script:
    # 排除所有CI_开头的GitLab内置变量
    env | grep -v "^CI_" > .env
    # 同样过滤后生成带export的文件
    env | grep -v "^CI_" | sed 's/^/export /' > .env_export

只保留自定义前缀变量

如果你的自定义变量都有统一前缀(比如APP_),可以精准提取这些变量:

build:
  stage: build
  script:
    env | grep "^APP_" > .env
    env | grep "^APP_" | sed 's/^/export /' > .env_export

注意事项

  • GitLab的受保护变量和掩码变量只要允许在当前作业中使用,就会被env输出,但掩码变量的值会自动替换为星号,不会泄露敏感内容。
  • 建议给自定义变量设置统一前缀,方便后续精准过滤,避免混入无关变量。

内容的提问来源于stack exchange,提问作者Alberto Sanmartin Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:46:05