過去の記事でHelmの使い方やHelmチャートの作り方についてまとめました。今回はGitHub Pagesで公開する方法をまとめます。
前準備
今回使うHelmチャートはHelmチャートの作り方で作ったものを使います。もしまだ作っていなかったり、手元にないようでしたら用意をお願いします。
Pagesの設定
GitHub PagesでHelmチャートを公開するにはリポジトリが必要です。まずはリポジトリを作りましょう。
リポジトリ名はなんでもいいですが、公開範囲はPublicにしておいてください。私はhello-world
にしました。
リポジトリが作成できたら、ローカルのマシンにcloneしておきます。
git clone git@github.com:<github-user-name>/<repository-name>.git
以降はリポジトリ以下での作業になりますのでcd
しておいてください。
cd <repository-name>
main
ブランチを作っておきます。すでにmain
ブランチが存在する場合は読み飛ばしてください。
git commit -m 'initial commit' --allow-empty git push origin main
gh-pages
ブランチを作成します。このブランチを作成するとpages-build-deployment
というworkflowが自動で作成されます。このworkflowがbuildやdeployを行ってPagesで公開されるとい仕組みです。
git switch -c gh-pages git push origin gh-pages git swtich - # 元のブランチに戻る
このようにgh-pagesブランチが作成されたかGitHub上で確認してみてください。
続いてPagesの設定です。
このようにgh-pages
の/ (root)
を公開するように設定してください。
いよいよ公開
Helmチャートの作り方で作成したhello-worldというチャートをリポジトリにコピーします。パスはリポジトリルートから見てcharts/hello-world
です。
mkdir charts mv /path/to/hello-world charts/hello-world
GitHub Actionsのworkflowを作ります。このworkflowではchart-releaser-actionというアクションがChart.yamlの設定に基づいて、Helmリポジトリに必要なindex.yamlをgh-pagesブランチにコミットします。
mkdir -p .github/workflows
以下のコードを.github/workflows/release.yml
にコピーしてください。
name: Release Charts on: push: branches: - main - feature/chart paths: - charts/**/* - .github/workflows/release.yml jobs: release: # depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions # see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token permissions: contents: write runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 - name: Configure Git run: | git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Install Helm uses: azure/setup-helm@v1 with: version: v3.8.1 - name: Run chart-releaser uses: helm/chart-releaser-action@v1.4.0 env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
こんな感じのディレクトリ構成になったと思います。
. ├── .github │ └── workflows │ └── release.yml └── charts └── hello-world ├── .helmignore ├── Chart.yaml ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── deployment.yaml │ ├── service.yaml │ └── serviceaccount.yaml └── values.yaml 5 directories, 9 files
ここまでで追加したファイルをリポジトリ管理にしてmainブランチにpushします。
git add --all git commit -am 'add files' git push origin main
mainブランチにコミットするとGitHub Actionsが動き出します。ActionsのタブからRelease Charts
というworkflowのステータスを確認してみてください。このように緑のチェックマークがついていれば完了です。
次にpages-build-deployment
というworkflowを見ていきます。こちらも完了すると以下のようになりますので、確認してみてください。
Helmリポジトリに追加
それはでいよいよHelmリポジトリとして追加してみます。
helm repo add <repository-name> https://<github-user-name>.github.io/<repository-name>
うまく追加できたか確認します。以下のコマンドを実行して、追加したリポジトリが出てくるか確認してみてください。
helm repo list
チャートが登録されているかも確認します。
helm search repo <repository-name>
以下のようにでてきたらOKです。
NAME CHART VERSION APP VERSION DESCRIPTION hello-world/hello-world 0.1.0 v1.1.0 A Helm chart for Kubernetes
まとめ
GitHub Pagesを使って簡単に公開することができました。GitHub Actionsで公開手順を省略できるので、実際に公開する手順としては最初にPagesの設定をして、チャートのコードをコミットしていくだけになります。chartsというリポジトリにHelmチャートをまとめてもいいですし、それぞれのプロジェクトをチャートリポジトリとしてもよさそうです。