将 Helm Chart 打包并推送到 OCI Registry
本指南将带你完成一个实际的 CI 场景:你的 Git 仓库中已经包含一个 Helm Chart(Chart.yaml、templates/、values.yaml 等)。
我们将使用 Pipeline 来:
- 使用
git-cloneTask 克隆仓库 - 使用 Helm 打包该 Chart
- 将生成的 chart 推送到 OCI Registry(例如 Harbor)
你将创建一个包含两个 Task 的 Pipeline:
git-clone:将你的仓库克隆到共享 workspace 中helm:打包 chart 并将.tgz推送到你的 OCI Registry
前提条件
- 一个 Kubernetes 集群(你可以使用 minikube 进行本地测试)。
- 集群上已安装 Tekton Pipelines。
- 一个 Helm 3.8+ 容器镜像(支持 OCI 的 Helm v3)。
- 一个 OCI Registry 和 repository 路径(例如
oci://registry.example.com/charts)。 - 用于你的 OCI Registry 的推送凭证,形式为
kubernetes.io/dockerconfigjson类型的Secret:- 创建一个类型为
kubernetes.io/dockerconfigjson的 Kubernetes Secret(示例如下)。
- 创建一个类型为
- 一个包含有效 Helm Chart 的 Git 仓库(目录中包含
Chart.yaml、templates/、values.yaml)。 - 访问该仓库的 Git 凭证:
- 公共仓库:无需特殊配置。
- 私有仓库:创建一个 Git 凭证 Secret(SSH 或 basic-auth)。
为什么使用 kubernetes.io/dockerconfigjson 类型的 Secret?我们将通过 HELM_REGISTRY_CONFIG 将 Helm 指向 distribution registry。
分步说明
步骤 1:创建 Registry 凭证 Secret
你需要为你的 OCI Registry 准备一个 kubernetes.io/dockerconfigjson 类型的 Secret 作为 registry 凭证。
你可以参考 准备 Registry 凭证。
步骤 2:准备 helm 镜像
你需要一个 Helm 3.8+ 容器镜像(支持 OCI 的 Helm v3)来运行 helm 命令。
你可以参考 发现工具镜像。
按标签搜索时,请将镜像指定为 helm,例如:-l operator.tekton.dev/tool-image=helm。
步骤 3:定义 Pipeline
此 Pipeline 使用 git-clone 拉取你的仓库,然后调用 helm 来打包并推送你的 chart。
请将 <helm-image> 替换为你的 Helm 镜像。
步骤 4:使用 PipelineRun 运行
绑定 workspace 并传入你的参数。
故障排查
helm: command not found:确保你的image实际包含 Helm 二进制文件。Error: unknown command "push":你的 Helm 镜像不支持 OCI push。请使用更新的 Helm(3.8+)镜像。unauthorized: authentication required:确保 Secret 正确,并已挂载到 registry-creds。确认HELM_REGISTRY_CONFIG已设置为该路径。