Hugo で立ち上げたブログの記事をカッコよく管理する
💡 まとめ
🌱 背景
初投稿でした話ですが、このサイトの立ち上げには Hugo
を使用しています。
ソースコードを管理する際に Git (当サイトは GitLab) を使用するわけですが、そうすると、ブログ記事を追加するためだけにコミットログを積まなければならなく、コミットログが非常に汚くなってしまいます。
そこで考えたのが…
ブログ記事だけ別リポジトリにすればいいんじゃね?
です。
:thinking_face: 考えた方法
「ブログ記事だけ別リポジトリに」した後を考えます。
サブモジュール化する
Git にはサブモジュールという便利な機能があって、これを使うと少なくともブログ記事のコミットログは別で管理できます。
ところが、サブモジュールに関する ある記事 を読んだところ、サブモジュールの更新があった場合に自分で更新を読み込まなければいけないようです。
結局は Update submodule: posts
のようなコミットログを積まないといけないことになるので、面倒というよりはブログ記事のように更新頻度の高いコンテンツをサブモジュール化するのはあまり向いていないと感じました。
そんなこんなで採用したのが次の方法です。
ブログ記事をクローン・ビルドするパイプラインを組む
.gitlab-ci.yml
を以下のように書いて CI/CD を設定しました。(実際はもっといろんな処理を書いていますが、概略はこんな感じです)
image: registry.gitlab.com/pages/hugo:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
pages:
script:
- apk update && apk --no-cache add git
- git clone ${ブログ記事の URL}
- git clone ${ブログ記事画像の URL}
- hugo
artifacts:
paths:
- public
only:
- master
これで、 master
ブランチに何かをプッシュするだけでパイプラインが実行され、記事の更新が可能となります!😄
git clone
しますので、ビルド成果物に .git
が含まれないように注意しましょう。GitLab における環境変数は、リポジトリのページから 「Settings → CI / CD → Variables」 と進むと設定できます。
詳しくは こちら
🕓 定期実行も設定する
GitLab にはパイプラインを定期実行してくれる便利な機能があります。
せっかくなので設定してみようと思います。
リポジトリのページから 「CI / CD → Schedules → New schedule」と進み、日本時間毎朝 4 時にパイプラインを実行するように設定してみます。
これで定期実行も完成です。
ちゃんと実行できるかどうか心配な場合は一覧画面から手動実行することもできます。
最後まで読んでいただきありがとうございました!😉