弥生開発者ブログ弥生開発者ブログ2020-03-19さようならrrrspec、いままで速度をありがとうMisoca開発チームの黒曜(@kokuyouwind)です。今回の記事タイトルは銀河ヒッチハイクガイドからの引用です。*1その水棲動物を見よ。MisocaのCIとrrrspecMisocaではCIが短時間で終わるよう、rrrspecを利用してRSpecを分散実行していました。関連記事もいくつか書いています。tech.misoca.jptech.misoca.jp自分の入社時に20分ほどかかっていたビルドが5分ほどで収まるようになり、またメンバーが増えても並列性を担保できたのはrrrspecの力による部分が大きいといえるでしょう。Maintenanceが終了してしまいました。その後もMisoca社内でforkしたリポジトリを保守しながら運用していたのですが、次第に以下のような問題が顕在化してきました。Maintenance終了と直接関係ないものもありますが、いずれにせよこのままrrrspecを使い続けるのは厳しいだろうと判断し、仕組みを載せ替えることになりました。結構な力技でrspecを回していたため、載せ替え先でもある程度並列実行できるものにしないと現実的な時間で終わらないということはわかっていました。このため以下のようにいくつかの案を作り、それぞれの速度や運用コストを見積もった上でどれにするかを判断しました。Slaveノード1台の内部で並列実行するそれぞれを試験実装してみたところ、CircleCIは運用費用が現状から大きく跳ね上がってしまうこと、knapsackでの分散はparallel_testsに比べてノードの性能を引き出しづらいことがわかりました。Jobが残っているためJenkins自体は止められずCI環境が複数になること、などの懸念もありました。これらの調査結果を踏まえて、実行速度と運用コストのいずれも許容範囲内であったparallel_testsへ載せ替える方針としました。Slaveではspec実行環境が整っていないという問題がありました。いうのはしんどそうだったため、Dockerを使ってspecを実行することにしました。細かいところを端折ったJenkinsfileは以下のようなものです。}}Pipeline組み込みのDocker文法を使う方法もありましたがサイドカーコンテナの扱いがややこしそうだったため、単純にdocker-composeを使うだけにとどめています。18並列という数字は並列数を変えながら検証して得られた数字で、これ以上に並列数を上げてもほとんど実行時間が変化しませんでした。spec実行にはc5.12xlargeインスタンスを利用しています。Pluginを利用して必要なときだけspotインスタンスが立ち上がるようにしました。結果さすがにDocker立ち上げやRails起動などのオーバーヘッドが大きく5分には収まりませんでしたが、6分ほどでrspecの実行が終わるようになりました。🛠工夫が必要だったところ作業中にいろいろと罠を踏んだり工夫したことがあるのですが、それぞれ細かく書くと長くなるのでざっくり箇条書きしておきます。userにubuntuの指定が必要でした。今回の置き換えでCIにかかる時間は少し長くなってしまいましたが、以下のように得られたメリットも多くありました。rrrspecクラスタがなくなったことで管理する対象が格段に減ったJenkinsローカルでテストを実行することで、失敗時スクリーンショットなどの収集を簡単に行えるようになったDockerベースにしたことで環境の切り替えが楽になり、レイヤーキャッシュが効くため複雑な自前キャッシュを減らせたrspec実行に時間がかかるのも、テストが多すぎる・重すぎるという問題の比重のほうが多いため、ここからは仕組みの改善ではなく既存テストの棚卸しといったことが必要になってくるのではないかと思っています。最後に、rrrspecには導入してからの3年半ほど、MisocaのCIを支えていただきました。コミッターの皆様、これまでありがとうございました。宣伝Misocaでは「生命、宇宙、そして万物についての究極の疑問の答え」を探求するエンジニアを募集しています。あとCIの仕組みを改善したいエンジニアも募集しています。docker-compo...2019-03-15開発環境のECSリプレイスとterraformでのコード化こんにちは、Misoca開発チームの黒曜です。Misoca開発の@kokuyouです。...2017-06-16MisocaのCI構成まとめこんにちは。4月からMisocaにjoinしました、tkykです。弥生は第23回Quesに協賛します。引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。