如何在YAML配置文件中正确使用GitLab CI/CD变量完成值替换
问题原因
YAML本身不具备自动解析系统环境变量占位符的能力,GitLab CI仅会解析.gitlab-ci.yml自身范围内的变量,不会主动修改仓库内其他YAML文件的文本内容,所以你写在目标YAML里的${P_TOKEN}会被当做普通字符串处理。
解决方法
推荐使用envsubst工具做占位符替换,操作步骤如下:
- 第一步:将你的目标YAML文件重命名为模板文件,比如
config.template.yaml,保留原有${P_TOKEN}占位符内容不变:
spec: command: test.sh env_vars: - TOKEN=${P_TOKEN}
- 第二步:修改
.gitlab-ci.yml,在对应作业的script阶段增加占位符替换逻辑,生成实际使用的配置文件:
image: name: xxx variables: P_TOKEN: ${TOKEN} # 替换为你实际的作业名称 deploy: script: # 若使用的镜像未自带envsubst,可先执行安装命令,Debian/Ubuntu系执行: # - apt update && apt install -y gettext-base # Alpine系执行: # - apk add --no-cache gettext # 替换模板变量生成正式配置文件 - envsubst < config.template.yaml > config.yaml # 验证替换结果(可选,正式运行可删除) - cat config.yaml # 后续使用config.yaml执行你的业务逻辑
替代方案(无envsubst可用时)
如果当前CI环境无法安装envsubst,可以用sed命令实现替换:
sed -i "s/\${P_TOKEN}/$P_TOKEN/g" config.template.yaml && mv config.template.yaml config.yaml
注意如果API密钥包含/、&等sed特殊字符,需要提前做转义处理,这种场景更推荐使用envsubst方案。
内容的提问来源于stack exchange,提问作者CJW
相关产品推荐
相关产品推荐

