トップ «前の日記(2018/08/07 (火) ) 最新 次の日記(2018/08/09 (木) )» 編集 RSS feed

HsbtDiary


2018/08/08 (水) [長年日記]

heroku container で Ruby の snapshot パッケージを作成するようにした

パッケージ配信の origin をオンプレミスのサーバーから、s3 に変更したことに伴ってサーバーで毎日作成していた trunk と ruby_2_5 の snapshot パッケージの作成が s3 に対応しておらず、しばらく更新されていない、という状態だったのを heroku container 使っていい感じな定期ジョブを作成するような仕組みを作って以前のように更新されるようにした。

最初は codebuild や cloud build, Travis CI などでできるかなあと調べていたけど、Docker Image を作ってその中に閉じたジョブを定期実行する、という用件だけを満たすなら heroku の container デプロイと heroku scheduler を使えば、おおよそ安定した定期ジョブを作成できるということが分かったのが収穫だった。実行時間を指定したい、とかネットワーク経路が、ということがないならもう全部これでいいよ。

https://github.com/ruby/snapshot

できたのはこれです。もともとあった crontab を持ってきてそれっぽく動くようにしただけなのでだいぶ汚いんですが

  • rake snapshot などで、macOS や linux なら手元ですぐに Ruby のパッケージが作成される
  • docker build . すれば docker コンテナの中ですぐ実行できる
  • heroku container:push web, heroku container:release web して heroku scheduler で rake task を指定すれば s3 にアップロードされる(要 aws credentials)

ということができます。そんだけ、というのもあるんですが、実際にはパッケージ作成というのは貴重な Ruby コミッタ複数人の時間を 10h くらい占有する厳しい作業だったりするので、このリポジトリでやってることを発展させれば毎回発生しているパッケージ作成時のトラブルなどをなくして Ruby コミッタのコードを書く時間を増やせるというわけです。素晴らしい。

今後に向けては、snapshot だけじゃなくてリリースパッケージの作成や、Windows でも docker 経由で手元にパッケージを作って持ってくるようにする機能とか、CI 統合してパッケージ作成スクリプト自体のテスト(nobu がしょっちゅう壊す)をしていくつもりです。

pull-request お待ちしています。