GitHub Pagesのデプロイがタイムアウトするようになった
このブログはGitHub Pagesにより公開されているわけだが、このデプロイジョブが失敗するようになった。
deployジョブを見てみると、次のようなログで終わっていた。
Current status: deployment_queued
Current status: deployment_queued
Timeout reached, aborting!
Error: Timeout reached, aborting!
Deployment cancelled with https://api.github.com/repos/naotaco/blog/pages/deployment/cancel/xxxx
何がなんだかわからないが、とにかくタイムアウトしているということはわかる。ずっとqueuedとログが出ていたので、単にサーバが混んでいて待たされているだけなのか?とも思ったが、そんなことはなかった(たぶん)。
一つ前段のbuildジョブを見てみる。
こちらも全部で18分少々かかっており、長すぎるように思われる。stepごとにみてみるとartifactのuploadに16分かかっており、なにかおかしいような気がする。
ぐぐっていると、似たようなことを質問している人がいた。回答者曰く、
データのコピーに時間がかかっている。10GBというサイズは上限の10倍なので、減らした方がよい。
と。ドキュメントを見てみると、GitHub Pagesの上限(正確には、”a recommended limit” なので、推奨サイズか)は1GBらしい。recommendedということで即エラーとはならないものの、大きすぎるリポジトリがタイムアウトになるのは仕方ないといえる1。
さて私のリポジトリのサイズはいかほどか。Upload artifactのログの最後にサイズが出ているので、見てみると、
Total size of all the files uploaded is 2826141363 bytes
なるほど2.8GB。なるほど。このしょぼいブログがね。もちろんこのサイズは何も間違ってはおらず、リポジトリのファイルの合計が概ねこのくらいであった。
話は単純で、このブログは画像をとにかく雑に放り込んであるので、それがほとんどのサイズを占めていたのであった。なので、シンプルに画像を減らしたり軽くしたりするだけで問題は解決した。
単純に画像が大きい&JPEGの画質設定が90くらいになっている
まずはこれで、単にクソでかいJPEGが死ぬほど置いてあった。撮って出しだったり、PCでの観賞用にExportした画像をそのまま置いたりしてあったため。
これは画像を一括リサイズできるフリーソフトのRalphaを使って一発で解決した。でかい画像を長辺2000px, 画質80くらいにしたところ1GBくらい減ったような記憶がある。
JPGにすべき画像がPNGになっている
これもあるあるで、面倒だったのでWindowsで撮ったスクリーンショットをそのまま入れていた。それがPNGに適した画像の場合はファイルサイズが小さくなって良いのだが、写真はまったく向かない。写真のトリミングが面倒だという理由で写真を多数スクリーンショット→PNGでブログに貼っていたため、クソデカPNGが大量に生成されていた。
これも画像の処理はRalphaで一発。PNGをJPGに変換しつつ、画像サイズや画質設定は前項のJPEGと同じにする。
ファイル名が変わるので、markdownに書いてある画像のアドレスを差し替える必要がある。findとsedをこねくりまわして.PNGを.JPGに置換した。
Wordpressが生成した不要な画像が残っている
最悪だったのがこれで、以前使っていたWordpressに画像をアップロードしたときに自動で生成される小さいサイズの画像がGitHub pages移行後も全てそのまま入っていたのであった。たとえばある画像はこんなことになっていた。
xxxx.jpg
xxxx-130x90.jpg
xxxx-390x205.jpg
xxxx-392x272.jpg
xxxx-400x267.jpg
xxxx-720x480.jpg
xxxx-768x512.jpg
xxxx-800x445.jpg
xxxx-900x600.jpg
幸い、無印の画像が最大サイズという仕様のようだったので、これに統一することにした。こちらもいろいろとこねくりまわして、\-[0-9]+x[0-9]+\.jpg
みたいな感じのパターンに該当する画像ファイルを全部消し、markdownからは該当しそうなリンクを全て無印に置き換えた。4500くらいあった画像が約800まで減った。
これらをすべて実施したあとはブログサイズが450MBくらいとなった。
結果
この通り、buildジョブが4分、deployが1分で終わっている。これなら大丈夫そうだ。
-
Proアカウントなので多少は上限を緩和してくれてもいいだろと言いたくもなるが。 ↩