deploymentとは?
deploymentとは、buildされたバージョンのソフトウェアを取り出し、それが動作するインフラ上に配置する行為です。
deploymentは、コードがbuild artifactとして棚に置かれているのをやめ、実際のサーバー上で動くソフトウェアになるステップです。ライフサイクルの中で最も影響の大きい瞬間の1つであり、だからこそチームはそれを日常的で取り消し可能なものにしようと努力します。
deployするとは何を意味するか
deployするとは、特定のbuildを対象環境にインストールしアクティブにすることです。artifactをサーバーにコピーし、設定を更新し、新しいバージョンを起動し、トラフィックをそこへルーティングします。環境はstaging、本番、あるいはその中間のいずれかであり得ます。
deploymentの仕組み
- deployするartifact (バージョン管理されたbuild) を選択します。
- 対象環境とその設定をプロビジョニングまたは再利用します。
- artifactをpushし、必要なデータベースマイグレーションを実行します。
- 新しいバージョンを起動し、ヘルスチェックとsmoke testを実行します。
- ロールバック経路を保ちながら、トラフィックを切り替えます。
deployment対release
この2つはしばしば混同されます。deploymentは新しいコードをインフラに配置し、releaseは機能をユーザーに利用可能にします。feature flagを使えば、コードをreleaseせずにdeployし、後で機能を有効化できます。両者を分けることでリスクが減ります。リスクの高いdeployとユーザー向けの変更が別々のタイミングで起こるからです。
実例
Webアプリの新しいbuildが本番にdeployされます。deploymentツールが新しいインスタンスを起動し、ヘルスチェックの通過を待ち、その後トラフィックを旧バージョンから新バージョンへ徐々に移します。エラー率が急増すれば、トラフィックは元に戻ります。これが自動ロールバックです。
なぜ自動化するのか
手動のdeploymentは遅く、プレッシャーの下で誤りやすいものです。自動化されスクリプト化されたdeploymentは一貫性があり、速く、絶えず実行されるため信頼できます。blue-greenやcanary deploymentのような戦略は、一度にリスクにさらす範囲を制限することで処理をより安全にします。
重要なポイント
- deploymentは、buildを環境にインストールしてアクティブにします。
- コードをdeployすることは、機能をユーザーへreleaseすることとは別物です。
- 自動化と段階的な戦略がdeploymentを安全にします。