くりにっき

フルスタックキュアエンジニアです

ItamaeのCIをTravis CIからGitHub Actionsに移行した

tl;dr;

github.com

前置き:ItamaeのCIの式年遷宮の歴史

僕がコミッタになる前はWercker + Vagrant + DigitalOceanを利用

僕とうなすけさん( id:yu_suke1994 )がコミッタになったタイミングでTravis CI( travis-ci.org ) + Dockerに移行

sue445.hatenablog.com

先日うなすけさんが travis-ci.com に移行

blog.unasuke.com

移行のモチベーション

Itamaeのリポジトリでは週1のweekly buildを実行してるのですが、1回辺りのビルド時間が長くて無料枠のクレジットを使い切ったためです

f:id:sue445:20210217214520p:plain

https://docs.travis-ci.com/user/billing-faq/#what-if-i-am-building-open-source を読むとOSSなら無料でクレジットを付与するのでメールしてねって書いてるので連絡したのですが、1週間以上経っても返事がこなかったので諦めてGitHub Actionsに移行しました。

メール送った直後にzendeskからの自動返信メールが届いたので向こうに届いてないってことはないはずなんだけどなぁ。。。(もちろんTravisからのメールが迷惑メールに振り分けられてもないです)

ハマったこと

ItamaeのCIだと docker run -d で起動したコンテナに対してItamaeを実行しているのですが、Itamae実行中にtmpディレクトリの中身が消えたりファイルが作れないという事象のせいでビルドがコケる現象が頻繁に発生してました。

代表例はこれ。/tmp/itamae_tmp/ が存在しなくてエラーになってそうなんだけど、Itamaeの処理の冒頭で /tmp/itamae_tmp/ を作ってるのにそうはならんやろ。。。

 INFO :   execute[echo -n 3 >> /tmp/subscribes] executed will change from 'false' to 'true'
ERROR :     stderr | mkdir: cannot create directory '/tmp/itamae_tmp/1613488120.203623': No such file or directory
ERROR :     Command `mkdir /tmp/itamae_tmp/1613488120.203623` failed. (exit status: 1)
ERROR :   remote_file[/tmp/remote_file] Failed.

https://github.com/sue445/itamae/runs/1911563358?check_suite_focus=true

/tmp がおかしそうというのはあたりがついてたのでパーミッション変えてみたりホスト側から /tmp をmountしてみたりと色々やってみたのですが、最終的には https://github.com/itamae-kitchen/itamae/pull/335/commits/69d6dfb13688609cfd96193122ae173b7c712da6 で解決しました。

良かったこと

  • GitHub Actionsの並列数で殴る構成にしたので1回あたりのビルド時間が7分から3~4分になった

悪かったこと

  • YAMLが41行から200行に増えた。(つらい)
    • いい加減アンカーとマージを使えるようにしてほしい
    • CircleCIならもっとリファクタリングできるんだけどなぁと思いながらYAMLを書いてた