とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

HelmチャートをGitHub Pagesで公開する

過去の記事でHelmの使い方Helmチャートの作り方についてまとめました。今回はGitHub Pagesで公開する方法をまとめます。

前準備

今回使うHelmチャートはHelmチャートの作り方で作ったものを使います。もしまだ作っていなかったり、手元にないようでしたら用意をお願いします。

Pagesの設定

GitHub PagesでHelmチャートを公開するにはリポジトリが必要です。まずはリポジトリを作りましょう。

リポジトリ名はなんでもいいですが、公開範囲はPublicにしておいてください。私はhello-worldにしました。

docs.github.com

リポジトリが作成できたら、ローカルのマシンに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の設定です。

docs.github.com

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