継続的デリバリーとは?
継続的デリバリーとは、ソフトウェアを常にrelease可能な状態に保ち、通過したどのbuildも単一の決定で本番へ出せるようにする実践です。
継続的デリバリーは、継続的インテグレーションをテストフェーズの先まで拡張します。CIがコードがbuildされテストに通ることを保証するのに対し、継続的デリバリーはその結果がいつでもパッケージ化されdeploy可能であることを保証します。releaseという行為が、エンジニアリングの慌ただしい作業ではなく、ビジネス上の決定になります。
"常にrelease可能"が意味するもの
pipelineを通過したすべての変更は、自動的にdeploy可能なartifactにbuildされ、stagingなどの環境で昇格されます。artifactは準備完了の状態で待機し、人間 (またはスケジュール) が本番への最終ボタンを押すタイミングを決めます。deployに関して土壇場での手動の組み立ては一切必要ありません。
デリバリー対デプロイメント
継続的デリバリーは、本番へのdeploymentを意図的でゲート付きのステップとして保ちます。継続的デプロイメントはそのゲートを取り除き、通過したすべての変更を自動的に出荷します。デリバリーは"要求に応じて出荷可能"であり、デプロイメントは"自動で出荷される"です。多くのチームはまずデリバリーを実践し、自信が高まるにつれて後からデプロイメントを採用します。
実例
あるチームが1週間で複数の機能をマージします。それぞれが自動的にstagingへdeployされ、検証されます。木曜日にプロダクトオーナーがreleaseを決定します。すべての変更がすでにパッケージ化されテスト済みなので、本番へのdeployは数分で終わる単一の承認であり、数時間かかるreleaseイベントではありません。
なぜリスクを下げるのか
release可能なartifactが継続的に生成されるため、releaseは小さく頻繁なまま保たれます。小さなreleaseはテストしやすく、推論しやすく、ロールバックもしやすいものです。release処理そのものが絶えず実行されるため、いざというときに信頼できます。
必要となるもの
- 信頼できるテストを備えた確かなCIの基盤。
- 少なくとも1つの本番前環境への自動deployment。
- バージョン管理され、再現可能なbuild artifact。
- 本番への明確で速い昇格経路。
重要なポイント
- 継続的デリバリーはソフトウェアを常にrelease可能な状態に保ちます。
- 本番へのdeployは、意図的でゲート付きの決定のままです。
- releaseを小さく、頻繁で、低リスクなものにします。