過去の記事で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チャートをまとめてもいいですし、それぞれのプロジェクトをチャートリポジトリとしてもよさそうです。
