Twitterでは長文書きがちのくせにブログの記事ぐらい長い文章を書くのが億劫なので、その中間ぐらいの日記・雑記を書く場所を https://diary.homi.run に用意することにした。
最初はここと同じくWordPressにしようと思っていたのだが、よく考えてみると別にWordPressじゃないと困るような複雑なことはしていないので、ちょくちょく名前の聞くHugoを利用してみることにした。
やるならそれなりにしようと思ったので、HugoをビルドしたイメージをGitHub Actionsで作成し、すでに自宅で稼働しているk0sクラスタにArgo CD Image Updaterを導入して自動でデプロイするみたいなものを作った。今回はそれについて軽くまとめておこうと思う。
GitHub ActionsでHugoから静的ファイルを作成してイメージビルド
Actionsはこんな感じ。
on:
workflow_dispatch:
push:
branches:
- main
jobs:
push:
runs-on: ubuntu-latest
env:
IMAGE_NAME: diary
steps:
- name: checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.110.0'
extended: true
- name: Build hugo
run: |
hugo --minify
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: setup metadata
id: meta
uses: docker/metadata-action@v4
with:
images: ghcr.io/homirun/diary
tags: type=sha,format=long
- name: Build and Push
uses: docker/build-push-action@v4
with:
context: ./
push: true
tags: ${{ steps.meta.outputs.tags }}
特筆するとすればpeaceiris/actions-hugo@v2
を利用していることだろうか。最初はGoとHugoをaptで落としてきていたのだが、バージョンが古かったりHugoの追加のもろもろが入らなかったりして面倒だったところに便利Actionを見つけたので利用させてもらった。
他は見たまんまでHugoから静的ファイルを出力させて、それをnginxをベースイメージにしたDockerfileでドキュメントルートにコピーしてイメージを作成しghcr.ioにpushする。
Argo CD Image Updaterの利用
Argo CD Image Updaterは、雑に説明すると定期的にコンテナレジストリを見に行って更新があればその新しいイメージを利用してDeploymentなどを作り直してくれる君。
雰囲気はこんな感じ。
公式ドキュメントに沿ってインストールした上でArgo CD Image Updaterを利用したいApplicationリソースに特定のannotationをつけるだけで良いので便利。
今回は以下のようなannotationをつけた。
annotations:
argocd-image-updater.argoproj.io/image-list: diary-image=ghcr.io/homirun/diary
argocd-image-updater.argoproj.io/diary-image.update-strategy: latest
update-strategyはlatestにした。latestはイメージがbuildされた日時が最新のものを選択するような設定である。pushされた日時じゃないので注意。
最終的にはこんな感じでよしなにIMAGESが更新されるようになる。
Argo CD Image Updaterでハマった点
この記事を書いている2023/3/2現在、Argo CD Image Updaterのstableは0.12.0なのだが、このバージョンでghcr.ioにあるイメージを監視させようとすると、うまくmetadataを引っ張ってこれずエラーになるようだった。
ERRO[0001] Error fetching metadata for homirun/diary:latest - neither V1 or V2 or OCI manifest returned by registry: manifest unknown: OCI index found, but Accept header does not support OCI indexes application=test image_alias= image_name=ghcr.io/homirun/diary registry_url=ghcr.io
このバグ自体はすでにISSUE化された上で修正されていたため、https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/v0.12.2/manifests/install.yaml を利用してインストールし直したところ、うまく動くことが確認できた。
そんな感じで楽に運用できるようにしたので、飽きずにどうにか更新できることを願う。