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

如何将GitLab CI/CD自定义变量正确传入K8s YAML配置文件

问题根因

GitLab CI执行kubectl apply时只会读取仓库内存储的静态YAML文件原始内容,不会自动替换文件中写的$PW_TEST占位符,因此提交到k3s集群的ConfigMap会完整保留$PW_TEST字符串,不会注入你在CI/CD Variables中配置的实际值。
另外你当前流水线作业里写的variables: PW_TEST: $PW_TEST是冗余配置,GitLab CI默认会把项目级配置的CI变量自动注入作业运行环境,不需要额外手动赋值。

解决方案

根据你后续要传入密码类敏感信息的需求,分场景给你可直接落地的方案:

方案1:非敏感配置快速替换(适合当前测试场景)

用envsubst工具在apply前动态替换YAML里的占位符,不需要修改仓库里的原始文件,直接通过管道把替换后的内容传给kubectl执行即可。

  1. 首先在alpine镜像的依赖安装步骤里加上gettext包(envsubst在这个包里)
  2. 把原来直接apply index.yml的命令改成替换后管道传入
    修改后的流水线script段参考:
script:
  - echo $PW_TEST
  - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  - install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  # 安装envsubst依赖
  - apk add --no-cache gettext
  - kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f nm.yml
  # 动态替换变量后直接apply,不生成落地的临时文件
  - envsubst < index.yml | kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f -
  - kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f depl.yml
  - kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f svc.yml
  - kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f test_ingress_int.yml

注意:如果变量值包含$、&、空格这类特殊字符,envsubst可能出现转义异常,且这个方案会把变量值明文写进ConfigMap,不适合密码类敏感信息。

方案2:敏感信息部署方案(后续传数据库密码等场景推荐)

密码、密钥这类敏感信息不要存在ConfigMap里,也不要通过替换明文到YAML的方式部署,遵循以下方式处理:

  • Kubernetes层面:敏感信息统一存Secret,不要把包含敏感值的Secret YAML提交到仓库,直接在CI流程里动态生成、应用Secret:
# 示例:动态创建存储敏感信息的Secret,值直接从CI变量读取,全程不落地到仓库文件
kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify create secret generic app-secrets \
  --namespace lazzio \
  --from-literal=pw_test=$PW_TEST \
  --dry-run=client -o yaml | kubectl apply -f -

后续Deployment、Pod里可以通过环境变量、文件挂载的方式读取Secret里的值,全程不会在仓库里留存明文敏感信息。

  • Ansible部署层面:不需要把密码写在Ansible的变量文件里,直接在CI执行ansible-playbook时通过命令行传参注入敏感变量即可:
ansible-playbook deploy_database.yml -e "db_admin_pass=$PW_TEST"

Ansible执行时会直接读取这个传入的参数,不会把值写入任何仓库托管的文件。

内容的提问来源于stack exchange,提问作者ladislav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:24:23