『継続的デリバリー』 第7章 学習メモ

コミットステージの概観

1.はじめに

継続的デリバリーにおける、コミットステージについての調査記録です。
継続的デリバリーの中での、コミットステージについての概観を記載します。
『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』の第7章に対応します。

2.概要・目的

コミットステージの責務は、リリース候補の生成である。
コミットステージは、デプロイメントパイプラインの実装の開始地点である。

3.対応概要

コミットステージの原則とプラクティスは以下の通り。

  • コミットステージでは、早期のフィードバックが重要であり、CIサーバはプレテストコミット(プレフライトビルド)を提供する。
  • コミットステージが失敗したときは、チーム全体で対応する。
  • 疎結合スクリプトが重要である。
  • 開発者がコミットステージを制御する。
  • ビルドマスターが必要となるパターンがある。

コミットステージの出力についての観点は以下の通り。

  • 成果物リポジトリの媒介的責務。
    バージョン管理のリビジョンと紐づける。

コミットテストスイートにおけるユニットテストの観点は以下の通り。

  • 高速かつ広範囲。
  • 検証対象の単一化。

4.対応詳細

コミットテストスイートの原則とプラクティスは以下の通り。

  • UIはテストしない。
  • DIで他のオブジェクトから分離する。他のオブジェクトとの結合を弱める。
  • DBに依存しない。ステートレスなコミットテスト。
    入力と出力の組み合わせを期待結果と比較するという、テストの基本構造で表現できる疎結合なテスト設計とする。
  • 非同期処理を回避する。
  • テストダブルで対象でないオブジェクトをスコープから除外する。
    モックで対象オブジェクトとのやり取りを検証する。スタブは呼ばれ方を表現できない。
  • 時間を抽象化する。
    遅延・待ちの原因となるふるまいをすべてスタブ・モック化する。
  • コミットテストスイートを高速にするための解決策は以下の通り。
    • テストスイートを分割し、並列実行する。
    • CIサーバのビルドグリッド機能を使用する。
    • 失敗しづらく時間がかかるテストを受入後のステージに移す。

5.影響・作用

コミットステージにより、変更によって入り込む欠陥をできるだけ早く検出し、開発者に通知し、問題を素早く修正できるようにすることができる。
CIに含まれるその他のプラクティスと組み合わせることで、デリバリープロセスの品質と信頼性が大幅に向上する。

6.おわりに

以上が、継続的デリバリーの中での、コミットステージについての概観です。

7.参考文献

『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』 第7章 コミットステージ