
helm repo index .してGitHub Pagesで公開している自作Helmチャートの更新運用時に、既存パッケージ(旧バージョン)のタイムスタンプが更新されてしまう事象が発生したので対処メモ。
- QuickFix
- 単純にhelm repo index .すると既存パッケージのタイムスタンプが更新されてしまう
- なぜこうなるのか?
- helm repo index --mergeでバージョンアップ分を追加する
- まとめ - Helm repo indexしたパッケージ更新で既存のtimestampを書き換えないようにする
QuickFix
./bump-index.sh <new_package.tgz>として、退避・index --mergeする。
bump-index.sh
if [ -z "$1" ]
then
echo "ERROR: File not specified"
exit 1
fi
set -e
mkdir tmp
cp $1 tmp/
helm repo index --merge index.yaml tmp
mv tmp/index.yaml index.yaml
rm -rf tmp
git diff
単純にhelm repo index .すると既存パッケージのタイムスタンプが更新されてしまう
バージョンアップしたパッケージを追加し、
$ tree charts
charts
└── stable
├── bump-index.sh
├── elastalert-0.1.0.tgz
├── elastalert-0.1.1.tgz
├── index.yaml
├── praeco-0.1.0.tgz
├── praeco-0.1.1.tgz
├── praeco-0.1.2.tgz <-- added
└── refresh-index.sh
helm repo index .すると、
git diff
---
praeco:
- apiVersion: v1
appVersion: 0.2.1-dev
- created: "2020-02-24T18:02:55.253788+09:00"
+ created: "2020-03-19T00:13:14.429971+09:00"
+ description: Praeco Helm chart for Kubernetes
+ digest: xxx
+ name: praeco
+ urls:
+ - praeco-0.1.2.tgz
+ version: 0.1.2
+ - apiVersion: v1
+ appVersion: 0.2.1-dev
+ created: "2020-03-19T01:23:42.482821+09:00"
description: Praeco Helm chart for Kubernetes
digest: xxx
name: praeco
@@ -40,7 +40,7 @@ entries:
version: 0.1.2
- apiVersion: v1
appVersion: 1.0.1
- created: "2020-02-24T18:02:55.260446+09:00"
+ created: "2020-03-19T01:23:42.482821+09:00"
description: Praeco Helm chart for Kubernetes
digest: xxx
name: praeco
@@ -49,11 +49,11 @@ entries:
version: 0.1.1
- apiVersion: v1
appVersion: 1.0.1
- created: "2020-02-24T18:02:55.258274+09:00"
+ created: "2020-03-19T01:23:42.479318+09:00"
description: A Helm chart for Kubernetes
digest: xxx
name: praeco
urls:
- praeco-0.1.0.tgz
version: 0.1.0
古いバージョンのcreated (timestamp)もアップデートされ、差分となってしまう。
なぜこうなるのか?
こちらで回答されている通り、そもそもhelm repo indexは新規生成のためのコマンドなので、差分管理的には動かない。
helm repo index --mergeでバージョンアップ分を追加する
上記Issueに記載の通り、以下の流れで作業実施することで、期待通り新バージョンのパッケージをindex.yamlに追加できる。
私はシンプルにするために、charts/stableの配下でtmpフォルダを作成して、そこで新規index.yamlを生成(既存index.yamlマージ)、既存index.yaml上書きするようにしている。
cd charts/stable mkdir tmp cp <new_package.tgz> tmp/ helm repo index --merge index.yaml tmp mv tmp/index.yaml index.yaml rm -rf tmp
QuickFixとして冒頭に記載の通り、これをbump-index.shとして、
if [ -z "$1" ]
then
echo "ERROR: File not specified"
exit 1
fi
set -e
mkdir tmp
cp $1 tmp/
helm repo index --merge index.yaml tmp
mv tmp/index.yaml index.yaml
rm -rf tmp
git diff
./bump-index.sh <new_package.tgz>で更新完了となる。あとはGit Commit, Pushで公開する。
まとめ - Helm repo indexしたパッケージ更新で既存のtimestampを書き換えないようにする
退避 + helm repo index --mergeで既存パッケージのタイムスタンプを更新することなく、新バージョンのパッケージを追加することができる。