トップ 最新

ただのにっき

2018-05-31(木) [長年日記]

CircleCIをOSS Gateのアンケート集計に使ってみた

自分がGitHubに置いてあるものはすべてOSSということもあり、CIにはOSSでの利用が無料のTravis CIを使っている。最近は毎日commitがなくてもビルドタスクを走らせてくれるなど*1、老舗ながらけっこう便利で良い。難点は無料枠はかなり遅いというくらいか。

で、他のCIサービスも使ってみたいと思っていたところ、先日のOSS Gateでアンケートの文法エラーをCIで検出させたいね*2、なんて話が出たので、これをCircleCIあたりでやってみようと。

CircleCIの使い方自体は、公式のドキュメントがけっこう充実していたので、Qiitaとかに頼らなくても(笑)ちゃんと使えた。

  1. アンケート集計用に使っているaggregate.rbを、文法エラー時にメッセージをSTDERRに出して、非ゼロで終了するように修正
  2. 実行時(日本標準時*3)の日付のあるアンケートフォルダ内だけを対象にしてaggregate.rbを実行するCI専用スクリプトを作成
  3. .circleci/config.ymlを書く。本物(?)のテストスイートを使っているわけじゃないので、かなり雑な感じである
  4. CIrcleCIのアカウントを作って、GitHubのoss-gate/workshopをアクティベート
    • CIの状況をGitHub側に通知する設定を有効に
    • プルリクが作られたときだけCIが走るように設定
    • forkされたリポジトリからのプルリクも対象にするように設定
    • その他、CI実行中にプルリクが書き換えられたらキャンセルするなどの指定

これで外部からプルリクが投げ込まれると、自動的にCIが走るようになる。ためしに一度エラーのあるアンケート回答を入れてCIが失敗するのを確認してから、続いてエラーを修正して成功に変わるのを確認したところ(→CircleCIの当該ページ):

これで次回のワークショップからは、参加者自身にエラー修正をしてもらえそうだ。これまでは集計者(進行役かサポートメンター)がいちいち直してたから面倒だったのよ。この方式ならビギナーのプルリク練習としてもよさげ。

Travis CIに比してはるかに速いので、無料枠では並列ビルドができないけど、これくらい速ければOSS Gateみたいに短時間のうちにたくさんのプルリクが投入される場面でも問題にはならなさそう。一方、無料枠が1500分/月なので、たくさんのOSSを抱えてる人には厳しい場合があるかも。とはいえ、デプロイのトリガーなんかにも使えるようなので、いくつかのプロジェクトで使ってみてもいいな。

*1 CircleCIでもworkflowを使ってスケジュールタスクが実行できるらしい。WebUIでポチポチするのとYAMLファイルを書くのとどっちがいいかって話だな。

*2 OSS Gateのアンケートは各自で指定のYAMLファイルを編集してプルリクエストするというハードコア形式なので、不慣れなビギナーはどうしても誤った文法のままcommitしてしまいがちなのだ。

*3 あとでCI環境内でのTZ環境変数をAsia/Tokyoに設定する。