パイプラインの実行に失敗した場合は、ロールバックを使用して、環境を以前の安定した状態に戻すことができます。ロールバックを使用するには、ロールバック フローを計画し、その実装方法を把握します。

ロールバック フローは、展開中の障害を元に戻すために必要な手順を規定します。フローは、ロールバック パイプラインの形式を取り、実行および失敗した展開のタイプに応じて異なる 1 つ以上の連続したタスクを含みます。たとえば、従来のアプリケーションの展開およびロールバックは、コンテナ アプリケーションの展開およびロールバックと異なります。

適切なデプロイ状態に戻すために、ロールバック パイプラインには通常、次のタスクが含まれます。
  • 状態または環境のクリーンアップ。
  • 変更を元に戻すためのユーザー指定スクリプトの実行。
  • 以前のバージョンの環境の展開。

既存の展開パイプラインにロールバックを追加するには、展開パイプラインの実行前に、ロールバックする展開パイプライン内のタスクまたはステージにロールバック パイプラインを適用します。

ロールバックの設定

展開環境でロールバックを構成するには、以下を実行する必要があります。

  • 展開プロファイルを作成します。
  • ロールバック パイプラインを適用できるように、ロールバックをトリガする展開パイプラインの潜在的な障害ポイントを特定します。たとえば、ロールバック パイプラインを、前のタスクが正常に完了したかどうかを確認する展開パイプラインの条件またはポーリング タスク タイプに適用することができます。条件タスクの詳細については、条件タスクで変数バインドを使用して、 Code Stream でパイプラインを実行または停止する方法を参照してください。
  • タスクやステージの障害など、ロールバック パイプラインをトリガする障害の範囲を特定します。ロールバックをステージに接続することもできます。
  • 障害が発生した場合に実行するロールバック タスクを決定します。ロールバック パイプラインは、これらのタスクを使用して作成します。

ロールバック パイプラインは手動で作成できます。また、 Code Stream で作成することもできます。ロールバックの共有パイプラインを選択することもできます。

  • 空のキャンバスを使用して、既存の展開パイプラインに並行するフローに基づくロールバック パイプラインを手動で作成できます。次に、ロールバック パイプラインを、障害時にロールバックをトリガする展開パイプライン内の 1 つ以上のタスクに接続します。
  • スマート パイプライン テンプレートを使用すると、ロールバック アクションを使用して展開パイプラインを構成できます。その後、 Code Stream は、障害発生時に展開をロールバックする事前定義されたタスクを使用して、1 つ以上のデフォルト ロールバック パイプラインを自動的に作成します。

    スマート パイプライン テンプレートを使用してロールバックを含む CD パイプラインを構成する方法の詳細な例については、Code Stream で展開をロールバックする方法を参照してください。

  • ロールバックに共有パイプラインを使用することで、同じ機能を実行する複数のロールバック パイプラインを作成する必要がなくなります。共有パイプラインを選択して、複数のプロジェクトのパイプラインのタスクをロールバックできます。

    パイプライン タスクに共有パイプラインを使用するロールバックを構成する方法については、Code Stream での共有パイプラインの作成と使用を参照してください。

展開パイプラインにロールバックを含む複数のタスクまたはステージがある場合

複数のタスクまたはタスクとステージにロールバックを追加した場合は、ロールバックの順序が変わることに注意してください。
表 1. ロールバック シーケンスの決定
ロールバックの追加先 ロールバックのタイミング
並行タスク 並行タスクのいずれかが失敗した場合、すべての並列タスクの完了または失敗後に、タスクのロールバックが実行されます。ロールバックはタスクが失敗した直後には実行されません。
ステージ内のタスクとステージの両方 タスクが失敗した場合、タスクのロールバックが実行されます。タスクが並行タスクのグループに含まれている場合、タスクのロールバックはすべての並列タスクの完了または失敗後に実行されます。ステージのロールバックは、タスクのロールバックが完了するか、または完了に失敗した後に実行されます。

次のようなパイプラインを考えます。

  • 本番ステージにロールバックが含まれる。
  • 並行タスクのグループで、各タスクに独自のロールバックがある。

[UPD Deploy US] という名前のタスクにロールバック パイプライン [RB_Deploy_US] があります。[UPD Deploy US] が失敗すると、ロールバックは [RB_Deploy_US] パイプラインで定義されたフローに基づいて実行されます。

並行タスクを含むパイプライン ステージでは、タスクが失敗した場合に使用されるロールバック パイプラインが ロールバック タブに表示されます。

[UPD Deploy US] が失敗すると、[RB_Deploy_US] パイプラインは、[UPD Deploy UK][UPD Deploy AU] の完了または失敗後に実行されます。ロールバックは [UPD Deploy US] が失敗した直後には実行されません。また、本番ステージにもロールバックがあるため、ステージのロールバック パイプラインは [RB_Deploy_US] パイプラインの実行後に実行されます。