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

如何通过GitHub Actions将环境变量传入Kubernetes YAML部署文件?

问题分析与解决方案

你的当前实现方式不正确,GitHub Actions不会自动解析并替换Kubernetes YAML文件中的#{KUBERNETES_NAMESPACE}#这类自定义占位符,导致Kubernetes API收到的命名空间是原始占位符字符串,从而触发权限校验错误。

以下是两种可行的解决方法:

方法一:使用envsubst批量替换环境变量

envsubst是gettext工具集的命令,可自动识别文件中的环境变量并替换,适合多变量场景。

修改你的GitHub Actions Job,添加变量替换步骤:

Deploy-Dev: 
    runs-on: 'ubuntu-latest'
    environment: 'Dev'
    env:
      KUBERNETES_NAMESPACE: cep-dev
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 安装gettext(包含envsubst)
        run: sudo apt-get update && sudo apt-get install -y gettext

      - name: 替换YAML中的环境变量
        run: |
          # 批量处理所有YAML文件
          for file in Kubernetes/*.yml; do
            envsubst < "$file" > "${file%.yml}-processed.yml"
          done

      - name: 部署到Kubernetes
        run: kubectl apply -f Kubernetes/*-processed.yml

方法二:使用sed精准替换占位符

如果仅需替换命名空间这一个占位符,用sed命令直接替换字符串更简洁:

修改Job步骤如下:

Deploy-Dev: 
    runs-on: 'ubuntu-latest'
    environment: 'Dev'
    env:
      KUBERNETES_NAMESPACE: cep-dev
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 替换YAML中的命名空间占位符
        run: sed -i "s/#{KUBERNETES_NAMESPACE}#/${KUBERNETES_NAMESPACE}/g" Kubernetes/*.yml

      - name: 部署到Kubernetes
        run: kubectl apply -f Kubernetes/

两种方法任选其一即可,执行替换步骤后,YAML文件中的占位符会被实际的环境变量值替换,部署时就能正确指向目标命名空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:10:43