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

如何在GitHub Actions中对Pulumi输出的kubeconfig进行Base64编码?

解决GitHub Actions中Pulumi输出kubeconfig的Base64编码错误

错误原因

你遇到的command not found错误,本质是因为Pulumi输出的kubeconfig是多行YAML结构,直接在shell命令中展开时,换行、冒号等特殊字符会被shell误解析为多个独立命令,比如kubeconfig里的certificate-authority-data:行被当成了要执行的命令,导致报错。

正确解决方案

方案1:用单引号包裹kubeconfig内容(简单直接)

通过单引号将Pulumi输出的kubeconfig内容包裹,避免shell解析其中的换行和特殊字符:

- run: |
    echo "KUBE_CONFIG=$(echo -n '${{ steps.pulumi.outputs.kubeconfig }}' | base64 -w 0)" >> $GITHUB_ENV

注意:如果你的kubeconfig内容本身包含单引号,这个方法会失效,建议用方案2。

方案2:通过临时文件中转(兼容性最好)

先将kubeconfig写入临时文件,再对文件内容做Base64编码,彻底规避shell解析问题:

- name: 编码kubeconfig并写入环境变量
  run: |
    # 将kubeconfig写入临时文件
    echo "${{ steps.pulumi.outputs.kubeconfig }}" > kubeconfig.tmp
    # 对文件内容做Base64编码(-w 0取消换行)
    KUBE_CONFIG=$(base64 -w 0 kubeconfig.tmp)
    # 写入GitHub环境变量
    echo "KUBE_CONFIG=$KUBE_CONFIG" >> $GITHUB_ENV
    # 清理临时文件
    rm kubeconfig.tmp

方案3:在Pulumi代码中提前编码(最简洁)

如果可以修改Pulumi代码,直接在pulumi中对kubeconfig做Base64编码后再输出,省去Actions中的编码步骤:

// TypeScript示例
import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";

const cluster = new k8s.Cluster("my-cluster", {/* 你的集群配置 */});
// 直接输出Base64编码后的kubeconfig
export const kubeconfigBase64 = pulumi.output(cluster.kubeconfig).apply(k => Buffer.from(k).toString('base64'));

然后在GitHub Actions中直接引用该输出:

- run: echo "KUBE_CONFIG=${{ steps.pulumi.outputs.kubeconfigBase64 }}" >> $GITHUB_ENV

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:08:17