展開パイプラインで障害が発生した後に、展開を以前の安定した状態に戻すタスクで、ロールバックをパイプラインとして設定します。障害が発生した場合にロールバックするには、ロールバック パイプラインをタスクまたはステージに適用します。

ロールによって、ロールバックする動機が異なる場合があります。

  • リリース時に、 Code Stream が処理の成功を検証できれば、リリース エンジニアはリリースを続行するかロールバックするかを把握できるようになります。タスクの障害、UserOps の拒否、メトリックのしきい値の超過などの可能性があります。
  • 以前のリリースを再展開できれば、環境の所有者は環境をすぐに正常な状態に戻すことができます。
  • ブルーグリーン展開のロールバックをサポートできれば、環境の所有者はリリースに失敗した場合にダウンタイムを最小限に抑えることができます。

ロールバック オプションをクリックした状態でスマート パイプライン テンプレートを使用して CD パイプラインを作成すると、パイプラインのタスクにロールバックが自動的に追加されます。この使用事例では、スマート パイプライン テンプレートで、ローリング アップグレード展開モデルを使用して、Kubernetes クラスタへのアプリケーション展開のロールバックを定義します。スマート パイプライン テンプレートにより、展開パイプラインと 1 つ以上のロールバック パイプラインを作成します。

  • 展開パイプラインでは、展開の更新タスクまたは展開の確認タスクが失敗した場合にロールバックが必要です。
  • ロールバック パイプラインでは、古いイメージを使用して展開が更新されます。

空のテンプレートを使用してロールバック パイプラインを手動で作成することもできます。ロールバック パイプラインを作成する前に、ロールバック フローを計画すると便利です。ロールバックの背景情報として、Code Stream でのロールバックの計画を参照してください。

前提条件

  • Code Stream で、プロジェクトのメンバーであることを確認します。メンバーでない場合は、プロジェクトにメンバーとして追加するように Code Stream 管理者に依頼します。Code Streamでプロジェクトを追加する方法を参照してください。
  • アプリケーションの展開先となる Kubernetes クラスタをセットアップします。1 つの開発クラスタと 1 つの本番クラスタをセットアップします。
  • Docker レジストリがセットアップされていることを確認します。
  • パイプライン、エンドポイント、ダッシュボードをはじめすべての作業をグループ化するプロジェクトを特定します。
  • たとえば、スマート パイプライン テンプレートを使用する前の Code Stream での CICD ネイティブ ビルドの計画の CD 部分に記載されている CD スマート テンプレートについて理解しておく必要があります。
    • アプリケーション イメージを Kubernetes クラスタに展開する Kubernetes 開発エンドポイントと本番エンドポイントを作成します。
    • 名前空間、サービス、展開を作成する Kubernetes YAML ファイルを準備します。プライベート所有のリポジトリからイメージをダウンロードする必要がある場合は、Docker 構成の [シークレット] を含むセクションを YAML ファイルに含める必要があります。

手順

  1. [パイプライン] > [新しいパイプライン] > [スマート テンプレート] > [継続的デリバリ] の順にクリックします。
  2. スマート パイプライン テンプレートに情報を入力します。
    1. プロジェクトを選択します。
    2. RollingUpgrade-Example のようなパイプライン名を入力します。
    3. アプリケーションの環境を選択します。展開にロールバックを追加するには、[本番] を選択する必要があります。
    4. [選択] をクリックし、Kubernetes YAML ファイルを選択して、[プロセス] をクリックします。
      使用可能なサービスと展開環境がスマート パイプライン テンプレートに表示されます。
    5. パイプラインによる展開で使用するサービスを選択します。
    6. 開発環境と本番環境のクラスタ エンドポイントを選択します。
    7. イメージ ソースの場合は、[パイプライン ランタイム入力] を選択します。
    8. 展開モデルの場合は、[ローリング アップグレード] を選択します。
    9. [ロールバック] をクリックします。
    10. [健全性チェック用 URL] を指定します。
    ロールバック パイプラインを作成するには、詳細を入力し、サービス、展開、および展開モデルを選択して、ロールバック チェック ボックスをオンにします。
  3. RollbackUpgrade-Example という名前のパイプラインを作成するには、[作成] をクリックします。

    RollbackUpgrade-Example という名前のパイプラインが表示され、開発ステージおよび本番ステージ内のロールバックできるタスクにロールバック アイコンが表示されます。

    ロールバック パイプラインでは、パイプラインによるロールバックが可能なタスクにロールバック アイコンが表示されます。

  4. パイプラインを終了します。

    [パイプライン] 画面には、作成したパイプラインと、パイプライン内のステージごとに新しいパイプラインが表示されます。

    • RollingUpgrade-Example。デフォルトでは、作成したパイプラインは Code Stream によって無効にされています。これは、実行前に必ず確認するためです。
    • RollingUpgrade-Example_Dev_Rollback。[サービスの作成][シークレットの作成][展開の作成][展開の検証] など、開発ステージでのタスクが失敗すると、この開発ロールバック パイプラインが呼び出されます。開発タスクが確実にロールバックされるように、 Code Stream ではデフォルトで開発ロールバック パイプラインが有効になります。
    • RollingUpgrade-Example_Prod_Rollback。[展開フェーズ 1][検証フェーズ 1][ロールアウト展開フェーズ][ロールアウト完了フェーズ][ロールアウト検証フェーズ] など、本番ステージでのタスクが失敗すると、この本番ロールバック パイプラインが呼び出されます。本番タスクが確実にロールバックされるように、 Code Stream ではデフォルトで本番ロールバック パイプラインが有効になります。
    Code Stream によってステージのロールバック パイプラインが作成され、有効にされます。
  5. 作成したパイプラインを有効にして実行します。
    実行を開始すると、 Code Stream から入力パラメータの入力を求められます。使用している Docker リポジトリで、エンドポイントのイメージとタグを指定します。
  6. [実行] 画面で、[アクション] > [実行の表示] の順に選択し、パイプラインの実行を監視します。

    パイプラインは、起動すると [RUNNING] になり、開発ステージの各タスクを移動していきます。開発ステージでパイプラインがタスクを実行できないと、RollingUpgrade-Example_Dev_Rollback という名前のパイプラインがトリガされ、展開がロールバックされて、パイプラインのステータスが [ROLLING_BACK] になります。

    ロールバック パイプラインが展開をロールバックして、パイプラインを以前の安定した状態に戻します。

    ロールバック後、[実行] 画面には RollingUpgrade-Example パイプライン実行が 2 つ表示されます。

    • 作成したパイプラインがロールバックされ、[ROLLBACK_COMPLETED] と表示されます。
    • ロールバックをトリガおよび実行した開発ロールバック パイプラインにより、[COMPLETED] と表示されます。

    ロールバックの結果が 実行 タブに表示され、コメントにロールバックのトリガ ポイントが示されます。

結果

完了です。パイプラインにロールバックが正常に定義され、障害が発生した時点でパイプラインがロールバックされたことを Code Stream で確認できます。