在庫変更の推進と展開

DevSecOps 参照実装を利用すると、コード変更のマージ、プロモート、実稼働環境へのデプロイを行う前に、コード変更のレビューを強制することができます。 セキュアでコンプライアンスに準拠したソフトウェアを提供するためのピア・レビューについて詳しくは、「Best practices for peer review compliance」 を参照してください。

ソース・ブランチからターゲット・ブランチへのインベントリー・エントリーのプロモート

インベントリリポジトリのソースブランチからターゲット(ステージング、本番)ブランチへコードの変更を反映するには、以下の手順を実行してください:

  1. 継続的統合パイプラインでは、ソース (master) ブランチにインベントリー・エントリーが取り込まれます。 継続的デプロイメント のプロモーションパイプライン を使用して、このコンテンツをソース(master)ブランチからターゲット(staging または prod)ブランチへプロモーションしてください。

    1. cd-pipeline ダッシュボードから、 「パイプラインの実行 (Run Pipeline)」 をクリックします。
    2. **「手動プロモーション・トリガー (Manual Promotion Trigger)」**を選択します。
    3. 「実行 (Run)」 をクリックします。 pipeline-run によって、ソース・ブランチからターゲット・ブランチにコード変更をプロモートするためのマージ要求が作成されます。

    マニュアル・プロモーション・トリガー
    マニュアル・プロモーション・トリガー

  2. プル要求を承認してマージします。

    1. 「pipeline-run」をクリックして、プロモーション・パイプラインの実行ログを確認します。

    MR 実行ログ
    MR 実行ログ

    1. マージ要求の URL を見つけ、マージ要求を開きます。
    2. 必須フィールド (「優先度」、「変更要求の割り当て対象者」、「追加説明」、およびその他のフィールド) にデータを設定します。
    3. マージリクエスト(MR)をマージして、ソースブランチからの変更をターゲットブランチに反映させます。

変更内容がターゲットブランチにマージされたので、 継続的デプロイメントパイプライン を使用してデプロイすることができます。

昇格検証パイプラインの使用

プロモーション PR がオープンされると、オプションで、プロモーション検証パイプラインでエビデンス集計とサマリー生成を実行し、プロモーションのプル/マージ要求(PR)にエビデンスステータスを設定できます。 PRは、Promotionパイプラインによって作成されることもあれば、インベントリ・リポジトリで手動で作成されることもある。 昇格検証パイプラインの 詳細はこちら。

ソース環境からターゲット環境への変更のデプロイ

ソース環境とターゲット環境は、継続的デプロイメントパイプラインのレベルで定義されます。

継続的デプロイメントパイプラインのプロパティ
継続的デプロイメントパイプラインのプロパティ

継続的デプロイメントパイプラインのトリガー 設定 に応じて、マージリクエストがマージされた後にパイプラインが自動的にトリガーされるか、あるいは手動でパイプラインがマージされます。 手動でパイプラインをマージするには、**「パイプラインの実行」**をクリックし、実行するトリガーを選択します。

パイプラインが開始され、インベントリー・リポジトリーの現行コミットに、パイプライン実行 ID がタグとして付けられます。 パイプラインはそのタグを使用してターゲット (prod) ブランチから内容を取得し、現行コミットと最後に成功したデプロイメントの内容の間のデプロイメント・デルタを計算します。 この差分は、 <target-environment>_latest というタグで示されます。ここで、 target-environment は、 prod_latest など、継続的デプロイメントパイプラインのプロパティで設定された値です。

パイプラインはその内容のデプロイを試行します。 デプロイメント時に、パイプラインで処理されるコミットに、変更要求 ID がタグとして付けられます。 デプロイ段階またはタスクが正常に完了すると、パイプラインは、プロモートしたコミットに「 <target-environment>_latest 」タグを付与することで終了します。

Git Repos and Issue Trackingレポタグ
Git Repos and Issue Trackingレポタグ

インベントリー・ワークフローについて詳しくは、DevSecOps パイプラインについてを参照してください。

インベントリ内の画像の保存場所を更新する

イメージがターゲットのコンテナレジストリにプロモートされた後、インベントリ内のイメージの場所を更新し、プロモートされたイメージを参照するようにします。

cocoa inventory update-locations コマンドを使用して、インベントリリポジトリ内のアーティファクトの場所を更新します。

cocoa inventory update-locations \
  --name="${inventory_image_type}/inventory.json" \
  --org="<org>" \
  --repo="<repo-name>" \
  --location="prod#${inventory_target_name}@${DIGEST}" \
  --environment="master"

以下に例を示します。

cocoa inventory update-locations \
  --name="<inventory-entry-name>/inventory.json" \
  --org="<org-name>" \
  --repo="<repo-name>" \
  --location="prod#icr.io/.../baseimage:4.x.y@sha256:..." \
  --environment="master"

--location パラメータは、ターゲット画像の場所とその SHA-256 ダイジェストを指定します。 場所の表記形式は以下の通りです:

<environment>#<image>:<tag>@sha256:<digest>

以下に例を示します。

prod#icr.io/<namespace>/<repository>/baseimage:4.x.y@sha256:<digest>

イメージプロモーションとサイン会

インベントリを更新する前に、イメージをターゲットのレジストリにコピーし、宛先イメージ参照に対して有効な署名があるようにする必要があります。

イメージのプロモーションと署名が完了したら、対象のレジストリからそのイメージのダイジェストを取得し、そのダイジェストを cocoa inventory update-locations`` で使用してください。 {: important} イメージのプロモーションと署名処理が完了したら、 cocoa inventory update-locations を実行してください。 インベントリには、対象レジストリ内のイメージおよびそれに対応するイメージダイジェストを参照する必要があります。

プロモーションのワークフロー

リリースワークフローは以下の通りです:

  1. ソースレジストリからターゲットレジストリへイメージをプロモートします。
  2. 対象レジストリ内のプロモートされた画像のダイジェストを取得します。
  3. cocoa inventory update-locations を、ターゲットイメージの場所とダイジェストを指定して実行します。

cocoa inventory update-locations コマンドは、 インベントリのメタデータを更新します。 コンテナイメージのコピーや署名は行いません。