Gatsby + Cloudflare Pagesで作っているブログサイトの話
Renovateで自動的にバージョンを上げているが5.11 -> 5.12へのPRでCloudflareのビルドが失敗するようになっていた
- 失敗時のログ
|02:55:49.076|NestedError: Cannot copy from `.cache/api-runner-browser-plugins.js` to `/opt/| |02:55:49.076|build/cache/cwd/.cache/api-runner-browser-plugins.js`: Cannot create directory| |02:55:49.077|`/opt/build/cache/cwd/.cache`: EACCES: permission denied, mkdir '/opt/build/c| |02:55:49.077|ache'| |02:55:49.079|| |02:55:49.079|- index.js:274 pMap.concurrency.concurrency| |02:55:49.080|[adapters]/[cpy]/index.js:274:12| |02:55:49.080|| |02:55:49.080|- index.js:141| |02:55:49.080|[adapters]/[p-map]/index.js:141:20| |02:55:49.080|| |02:55:49.081|- Caused By: NestedError: Cannot create directory `/opt/build/cache/cwd/.cache| |02:55:49.081|`: EACCES: permission denied, mkdir '/opt/build/cache'| |02:55:49.081|| |02:55:49.081|- fs.js:61| |02:55:49.082|[adapters]/[cp-file]/fs.js:61:8| |02:55:49.082|| |02:55:49.082|- index.js:15 cpFileAsync| |02:55:49.082|[adapters]/[cp-file]/index.js:15:2| |02:55:49.082|| |02:55:49.083|- index.js:269 pMap.concurrency.concurrency| |02:55:49.083|[adapters]/[cpy]/index.js:269:6| |02:55:49.083|| |02:55:49.084|- index.js:141| |02:55:49.084|[adapters]/[p-map]/index.js:141:20| |02:55:49.084|| |02:55:49.084|- Caused By: Error: EACCES: permission denied, mkdir '/opt/build/cache'|
Cloudfalre側で対応してもらわといと厳しそう?
さっと調べた感じではよく分からずどうしようもなさそう…という結論でいったん時間を置くことにしてた
Build system v2
別のタイミングで、Cloudflare Pagesでビルドキャッシュが使えるとの記事を発見した(リンクは失念してしまった)
見ているとBuild systemのv2を使うと書いてあり、その中で、新たなビルドイメージと書いてあったので新しいバージョンのGatsbyにも対応しているかも?ということで試した
- Build system v2の記事
Modernizing the toolbox for Cloudflare Pages builds
- ドキュメント
Language support and tools · Cloudflare Pages docs
これにより、サポートされる言語バージョンが上がる、ビルドキャッシュを使えるようになるなど色々メリットがあるよう
で、実際に試したらしっかり動いたので無事Gatsby v5.12でデプロイした
Build system v1との違い
デプロイ時、コンテンツに差分があるかチェックして挙動を変えたかったためシェルスクリプトも使っていて、その中でjqを使っていたがBuild v2だとjqが入っていなかった
対応として、スクリプトの先頭でjqをインストールするコマンドを入れた
curl -o $HOME/.local/bin/jq -L https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux64 && chmod +x $HOME/.local/bin/jq
インストール先は、PATHが通っているディレクトリを探しその中から、$HOME/.local/bin
が良さそうと判断して決めた
また、node_modules/.bin
のディレクトリがv1のときはPATHに含まれていたがv2では含まれなくなったようで単純にgatsby build
するだけだとコマンドがないと怒られる
なのでこちらはyarn build
(gatsby build)というようにyarnを通して実行するようにした
- 対応したときのPR、他にも色々修正入れているので参考になるかは微妙
Cloudflare build v2 by swfz · Pull Request #1637 · swfz/til
ビルドキャッシュについては一応ONにしてみたが、効果など確認してないので後日確認したい