將打包好的 Helm Chart Push 至 Nexus

之前筆記 打包 Helm Chart 簡單紀錄該如何打包 Helm Chart,但打包後的 Helm Chart 如果無法提供其他 server 使用就失去意義了,所以延伸紀錄將打包後的 Helm Chart 推送至 Nexus 的作法

基本環境說明

  1. macOS Mojave 10.15.2
  2. Helm v2.16.1
  3. Nexus 記得使用支援 Helm 的版本

    我不想多花時間從無到有建置 nexus-repository-helm 所以直接使用 docekr hub 包好的 image

    docker run -d -p 8081:8081 --name nexus nngplatform/nexus-repository-helm
    

Push 方式

  1. 使用 curl

    • 語法

      curl -v -u {帳號}:{密碼} --upload-file {helm chart file} {nexus helm url}
      
    • 範例

      curl -v -u admin:pass.123 --upload-file yowkochart-1.0.1.tgz http://localhost:8081/repository/helm/
      

    1curl

    2updated

  2. 使用 plugin - helm-nexus-push

    • 安裝 plugin

      helm plugin install --version master https://github.com/sonatype-nexus-community/helm-nexus-push.git
      
    • 實際 push

      • 先 login

        • 語法

          helm nexus-push {helm repo 名稱} login  -u {帳號} -p {密碼}
          helm nexus-push {helm repo 名稱} {helm chart}
          
        • 範例

          helm nexus-push test login  -u admin -p pass.123
          helm nexus-push test yowkochart-2.0.0.tgz
          

        3loginpush

      • 直接 push

        • 語法

          helm nexus-push {helm repo 名稱} {helm chart} -u {帳號} -p
          

          執行後會要求輸入密碼

        • 範例

          helm nexus-push test yowkochart-2.0.0.tgz -u admin -p
          

        4push

        5pushed

心得

helm-nexus-push 也支援直接 push chart 資料夾,而實際執行時會在真正 push 前直接做一次 helm package,需要留意的是這個動作沒有提供設定版本的參數,所以會依 helm chart 的慣例使用 Chart.yamlversion 值作為 chart version

另外是之前我常卡在 helm nexus-push 時會直接使用 -p {密碼} 讓執行時的 username 變為 '' 造成 401 Unauthorized 錯誤,這個我看了原始碼後覺得應該是防呆機制,所以要嘛先 login,要嘛就是 push 只帶 -u,再輸入密碼

最後我一開始覺得奇怪的點是:用原生 helm cli 無法成功 push ,只能透過 curlhelm-nexus-push(背後也是使用 curl),後來猜測應該是 nexus 沒有實作 helm repository api 造成的

參考資訊

  1. sonatype-nexus-community/nexus-repository-helm
  2. How can I programmatically upload files into Nexus 3?
  3. Helm Nexus Repository Push