如何通过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
相关产品推荐
相关产品推荐

