『継続的デリバリー』 第7章 学習メモ
コミットステージの概観
1.はじめに
継続的デリバリーにおける、コミットステージについての調査記録です。
継続的デリバリーの中での、コミットステージについての概観を記載します。
『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』の第7章に対応します。
2.概要・目的
コミットステージの責務は、リリース候補の生成である。
コミットステージは、デプロイメントパイプラインの実装の開始地点である。
3.対応概要
コミットステージの原則とプラクティスは以下の通り。
- コミットステージでは、早期のフィードバックが重要であり、CIサーバはプレテストコミット(プレフライトビルド)を提供する。
- コミットステージが失敗したときは、チーム全体で対応する。
- 疎結合なスクリプトが重要である。
- 開発者がコミットステージを制御する。
- ビルドマスターが必要となるパターンがある。
コミットステージの出力についての観点は以下の通り。
- 成果物リポジトリの媒介的責務。
バージョン管理のリビジョンと紐づける。
コミットテストスイートにおけるユニットテストの観点は以下の通り。
- 高速かつ広範囲。
- 検証対象の単一化。
4.対応詳細
コミットテストスイートの原則とプラクティスは以下の通り。
- UIはテストしない。
- DIで他のオブジェクトから分離する。他のオブジェクトとの結合を弱める。
- DBに依存しない。ステートレスなコミットテスト。
入力と出力の組み合わせを期待結果と比較するという、テストの基本構造で表現できる疎結合なテスト設計とする。 - 非同期処理を回避する。
- テストダブルで対象でないオブジェクトをスコープから除外する。
モックで対象オブジェクトとのやり取りを検証する。スタブは呼ばれ方を表現できない。 - 時間を抽象化する。
遅延・待ちの原因となるふるまいをすべてスタブ・モック化する。 - コミットテストスイートを高速にするための解決策は以下の通り。
- テストスイートを分割し、並列実行する。
- CIサーバのビルドグリッド機能を使用する。
- 失敗しづらく時間がかかるテストを受入後のステージに移す。
5.影響・作用
コミットステージにより、変更によって入り込む欠陥をできるだけ早く検出し、開発者に通知し、問題を素早く修正できるようにすることができる。
CIに含まれるその他のプラクティスと組み合わせることで、デリバリープロセスの品質と信頼性が大幅に向上する。
6.おわりに
以上が、継続的デリバリーの中での、コミットステージについての概観です。
7.参考文献
『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』 第7章 コミットステージ