Jekyll を使ったブログのプレビューと CI を Docker 上で行う
#tech
#jekyll
#docker
このブログで新しい記事を作成する際の preview サーバ起動や CI 上での記事コンパイルを Docker 上で行えるようにした。
image は envygeeks/jekyll-docker を使用。以下のような docker-compose.yml
を blog ディレクトリ直下に用意してローカルプレビューできるようにしてる。
version: "3.8" services: jekyll-build: command: jekyll serve --incremental --future --unpublished --watch --force_polling --livereload environment: TZ: Asia/Tokyo image: jekyll/minimal ports: - 4100:4000 - 35729:35729 volumes: - $PWD:/srv/jekyll
CI (GitHub Actions) 上では以下のコマンドで本番用にサイトをコンパイルし HTML ファイルを生成する。
docker-compose run -e JEKYLL_ENV=production -e JEKYLL_UID=1001 -e JEKYLL_GID=116 --rm jekyll-build jekyll build
コンパイルした HTML ファイルはマウントしたホストディレクトリ側 (GitHub Actions 上)に書き出されるため、UID/GID を適切に設定しないと書き込み権限エラーが発生する。
/usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `mkdir': Permission denied @ dir_s_mkdir - /srv/jekyll/.jekyll-cache (Errno::EACCES)
id
コマンドを叩いて GitHub Actions 上にファイル作成する際必要な UID/GID を確認する。
# Run id
uid=1001(runner) gid=116(docker) groups=116(docker),4(adm),101(systemd-journal)
jekyll-docker は README にもあるように、JEKYLL_UID
と JEKYLL_GID
(それぞれ初期値 1000)2 つの環境変数の値でユーザ作成とファイル書き込みをしている。
CI で実行する際はここで確認した UID/GID をセットしておく。
https://github.com/envygeeks/jekyll-docker#configuration