必须先确保harbor启用chartmuseum(v2.5.3及之前)或oci模式(v2.6+),且helm cli≥3.8;打包用helm package .生成tgz,依赖自动包含,如需排除须先helm dependency build .并清理charts/;推送推荐cm-push插件或oci方式(helm push ... oci://...)。

要把本地编写的Helm Chart打包并推送到Harbor,必须先确保Harbor已启用ChartMuseum组件(v2.5.3及之前版本)或已开启OCI模式(v2.6+),且Helm CLI版本≥3.8;否则推送会直接失败或返回401/404等错误。
打包本地Chart为tgz文件
进入Chart根目录(含Chart.yaml的目录),执行打包命令:
helm package .
这一步会生成形如mychart-0.1.0.tgz的归档包。注意:若目录下存在charts/子目录且含依赖Chart,【helm package会自动拉取并打包所有依赖】;若不希望打包依赖,需提前运行helm dependency build .再手动清理charts/目录,否则推送后依赖无法解析。
添加Harbor为Helm仓库(ChartMuseum模式)
方法一:使用HTTP协议添加(适用于启用ChartMuseum的Harbor)
helm repo add myharbor https://harbor.example.com/chartrepo/myproject --username=admin --password=Harbor12345
方法二:跳过添加仓库,直接推送(推荐,避免后续权限混淆)
这一步可省略,因为cm-push插件不强制要求先add repo;但若后续要pull或search,仍需执行add操作。
安装并使用cm-push插件推送
第一步:安装插件(仅需一次)
helm plugin install https://github.com/chartmuseum/helm-push.git
第二步:确认插件已加载
helm plugin list | grep push
第三步:推送tgz包到Harbor项目
helm cm-push mychart-0.1.0.tgz myharbor --username=admin --password=Harbor12345
注意:此处myharbor必须与helm repo add时指定的仓库名完全一致;如果之前没add过,这一步会报错“repository not found”,此时需先执行add命令或改用OCI方式。
使用OCI方式推送(Helm ≥3.8,Harbor ≥2.6)
方法一:先登录OCI注册表
helm registry login harbor.example.com -u admin -p Harbor12345
方法二:直接推送(无需提前add repo)
helm push mychart-0.1.0.tgz oci://harbor.example.com/chartrepo/myproject
【必须确保Harbor项目myproject已开启“Helm Chart”类型仓库支持,且用户有push权限】;若返回401,说明登录失败或项目未授权该用户写入;若返回“scheme prefix missing”,说明Helm版本低于3.8或未启用OCI——此时不要加oci://前缀硬推,会触发未知错误。











