👻

RookのCI改善への取り組み

2021/03/11に公開

本記事はRookと仲間たち、クラウドネイティブなストレージの Advent Calendar 202019日目の記事を後からこっそり埋めたものです。

RookのCIには以下のようなたくさんの問題がありました。

  • テスト環境を頑張ってAWSインスタンス+Jenkinsで作っている。環境構築が複雑なので変更時にトラブルが起きがち
  • 上記インスタンスのスペックが低いのでテストに時間がかかる
  • 互いに独立したテストスイートが全て直列動作する、かつ、一つでも失敗したらすべてやりなおしなのでさらに遅くなる上に失敗時にもう一度流すのが辛い
  • テスト対象ではなくテストそのものの問題によってテストが失敗してしまうケースが多々あった。ゆえに上記辛さが倍増
  • 辛いので高速なローカル環境でテストしたいが上記AWSインスタンス上でのみ動くことを想定した作りになっていたので動かせない
  • カバレッジがあまり高くない

恥ずかしながら半年ほど前の一時期にはテストがほぼ確実に通らなくないという機能不全に等しい状態になっていたこともありました。

現在は幸いにもこの状況はかなり改善しています。以下、どういう取り組みをした結果、なにがどうなったのかを書いていきます。

まずテスト環境についてGithub Actionsに移行しつつあります。複雑なテスト環境の管理がなくなり、メンテフリーなGithub Actionsのhost runner上でテストできるようになりました。スペックも現状は困っていません。まだJenkinsでのテストは一部残っていますが、次期安定版v1.6では脱Jenkinsを果たしてすべてのテストをGithub Actionsに移行する見込みです。

テストが直列実行される問題については、現在はすべてのテストが並列に流せるようになっており、かつ、個々のテストが失敗しても、全テストではなくそのテストだけを再実行すればいいようになりました。ストレス激減です。

テストそのものの問題でテストが失敗してしまう問題は、力技で地道に潰しまくりました。確率的に発生するものが多かったためにデバッグ、および修正確認に時間がかかり、非常に辛かった記憶があります。いまではゼロとはいいませんが、たまにしか発生しないというレベルまで抑え込めました。

ローカル環境でのテストもできるようにしました。というよりも筆者がRookの開発に参加したときに「これは絶対に必要だ」と真っ先に手を付けたのがここでした。テストの品質が一番悪い時期に高い効率でデバッグできるのはありがたかったです。本当にやっててよかった…

最近は別のテストを追加する動きが活発になっており、カバレッジがどんどん上がってきています。非常にいいことですね。筆者はテストの品質はソフトウェアの品質の鏡だと思っているので、今後ともさらなる改善をしていくつもりです。

Discussion