Tekton継続的デプロイメントパイプラインの設定 DevSecOps
このチュートリアルでは、コンプライアンスのベストプラクティスに準拠した継続的デプロイメント(CD)パイプラインとツールチェーンをセットアップすることができる。
開始前に
- Kubernetesクラスタの作成 でIBM Cloud® Kubernetes Serviceにアプリケーションをデプロイします。
- さまざまな統合にアクセスするため、およびそれらの統合を保護するために、ツールチェーンのシークレットを作成します。
- コンプライアンス継続的インテグレーション(CI)ツールチェーンはIBM Cloud® DevOps Insightsの統合で構成されています。
- オプション。 コンプライアンス・エビデンス・ロッカーとしてIBM Cloud® Object Storage を設定し、パイプライン実行のエビデンスを保存します。
- 対応する統合に割り当てられているIBM Cloud® Identity and Access Management(IAM)権限を検証してください。
- 以下のビデオでCDツールチェインセットアッププロセスの概要をご覧ください。
CD ツールチェーンのセットアップの開始
Continuous Deliveryサービスは、ツールチェーンのセットアップをガイドし、論理的な順序でプロセスを作成するテンプレートを提供します。 進行標識に、構成を実行するための各手順が示されます。 CIツールチェーンのテンプレートにアクセスするための手順に従ってください。
- IBM Cloudコンソールで、メニューアイコン
>Platform Automation>Toolchains をクリックします。
- 「ツールチェーン」ページで、**「ツールチェーンの作成」**をクリックします。
- CD-Develop with DevSecOps practices タイルをクリックします。
CIツールチェーンの設定
ようこそのページには、ドキュメントや関連資料へのポインタとともに、ツールチェーンの目的が要約されています。
-
**「Start」**をクリックします。
-
IBM Cloudに、同じリージョンとリソースグループのツールチェーン内のツールチェーン名を入力します。 IBM Cloud の同じリージョン、同じリソース・グループのツールチェーンにおいてツールチェーン名が固有になるようにしてください。
-
ドロップダウンリストから地域を選択します。
ツールチェーンのリージョンは、クラスターおよびレジストリーのリージョンとは違っていてもかまいません。
-
ドロップダウンリストからリソースグループを選択します。
-
「続行」 をクリックします。
現在の手順の構成が完了し、有効である場合にのみ、次の手順に進むことができます。 ガイド付きインストーラの前のステップを表示するには、いつでも「 戻る 」をクリックできます。 一連の手順で入力した構成値はすべてツールチェーン・インストーラーに保存されています。
いくつかのステップには、詳細設定に切り替えるトグルボタンがあります。 これらの手順は、デフォルトでは最小限のコンフィギュレーションを提示する。 しかし、より細かなコントロールが必要な上級ユーザーは、 Switch to advanced configuration toggleをクリックして、基本的な統合のオプションを表示することができます。
CDツールの統合をセットアップする
CDツール統合は、CDツールチェーンが使用する様々なツールやサービス統合のセットアップをカバーします。 CIパイプラインツールチェーンテンプレートを使用してCIプロセスをセットアップする場合は、CIツールチェーンを参照し、そのツールチェーンで使用されているリポジトリの名前をコピーしてください。
アプリケーション関連リポジトリー
CIツールチェーンをゼロからセットアップする場合は、CIツールチェーン作成時にこれらのリポジトリを設定する。
- インベントリー
- 配備情報はこのリポジトリを使って追跡される。 CIパイプラインが成功するたびに、CDパイプラインは作成されたCR番号と同じ名前の新しいブランチを作成し、デプロイが完了した後にmasterにマージします。 例えば、
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-inventoryです。 - 問題
- ビルドおよびデプロイメントプロセス中に発生したインシデントに関する問題を保存します。 例えば、
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-issuesです。 - エビデンス
- アプリケーションに属する生のコンプライアンス証拠をすべて収集する。 例えば、
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-evidenceです。 - ツール・チェーン
- パイプライン、トリガー、リスナーなどのtektonパイプライン定義は、このリポジトリに格納されています。 例えば、
https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-toolchainです。
CIツールチェインからリポジトリ名を取得したら、 Guided Setup 、CDツールチェインの作成を開始する。 セットアッププロセス中、各リポジトリに対して、既存の IBM がホストする Git Repos and Issue Tracking リポジトリに URL を指定することができます。 現在のところ、ツールチェーンは Git Repos and Issue Tracking リポジトリの作成のみをサポートしている。 将来のリリースでは、
GitHub, GitHub Enterprise (GHE) やその他の SCM プロバイダを使用したリポジトリの作成がサポートされます。
インベントリー
インベントリー・リポジトリーは、CI ツールチェーンでビルドされた成果物の詳細を記録するものです。 ツールチェーンのデフォルトの動作は、「 既存のインベントリを使用する 」で、ツールチェーンの既存のインベントリ・リポジトリをリンクします。 ツールチェーンは現在、既存の Git Repos and Issue Tracking リポジトリへのリンクのみをサポートしている。 詳細については、アプリケーション関連リポジトリ を参照してください。
- テンプレートで提供されるデフォルトの設定を受け入れることができます。
- 「続行」 をクリックします。
問題
issueリポジトリには、CIパイプラインの実行中に見つかったissueが記録される。
- テンプレートで提供されるデフォルトの設定を受け入れることができます。
- 続けるをクリック
パイプライン構成
パイプライン設定リポジトリには、デプロイ、テスト、その他のカスタムタスクに必要な YAML ファイルとスクリプトが含まれています。 Git リポジトリについての詳細は、Git Repos and Issue Tracking を参照してください。 カスタマイズ可能なスクリプトの詳細については、カスタムスクリプト を参照してください。
-
Source Provider および Create new deployment configuration repository のデフォルト設定を受け入れます。
ツールチェーンは、 Git 組織内の サンプル hello-compliance-deployment をクローンします。 Git リポジトリの詳細については、 Git Repos and Issue Tracking の設定を 参照してください。 カスタマイズ可能なスクリプトの詳細については、カスタムスクリプト を参照してください。
-
新しいリポジトリ名を入力します。
-
「続行」 をクリックします。
秘密
このツールチェインに含まれるいくつかのツール、そしておそらくカスタマイズ可能なスクリプトには、特権リソースにアクセスするためのシークレットが必要です。 IBM Cloud API キーもそのようなシークレットの例の 1 つです。 これらの秘密は、次のような秘密管理ツールに安全に保管してください。 IBM Key Protect for IBM Cloud, IBM Cloud® Secrets Manager または HashiCorp Vault. 秘密管理ツール をツールチェーンに統合することで、Tektonパイプラインの秘密を簡単に参照できるようになります。
秘密の値を読み取るには AppRole 認証メソッドを使用して秘密の値を読み取ることができます。
- このチュートリアルでは、IBM Cloud® Secrets Managerをシークレットの保管庫として使用します。 地域、リソースグループ、およびサービス名フィールドは、利用可能な選択肢に基づいて自動的に入力されます。 ドロップダウンインジケータをクリックすると、他の選択肢が表示されます。
- Secrets Manager インスタンス名を入力します。
- ドロップダウンリストから認証タイプを選択します。
- 「続行」 をクリックします。
エビデンス・ストレージ
エビデンスロッカーは、 DevSecOps CIパイプラインによって生成されるすべてのエビデンスと成果物を保管する。
- 既存の証拠品ロッカーリポジトリを使用するを選択します。
- 継続的インテグレーション(CI)ツールチェーンを設定した際に作成されたリポジトリ URL を選択します。 証拠保管の詳細については、証拠 を参照してください。
- IBM Cloud Object Storageバケットスライダを切り替えて、IBM Cloud Object Storageバケットに全ての証拠を格納する。
- 「続行」 をクリックします。
クラウド Object Storage バケット
IBM Cloud Object Storage インスタンス と、コンプライアンス証拠保管庫として機能する バケット が必要です。
- Cloud Object Storageインスタンス、バケット名、CloudObject Storageエンドポイントフィールドは自動的に入力されます。
- サービスID APIキーを入力します。
- 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
- 既存のキーをコピー&ペーストすることもできる。
- 「続行」 をクリックします。
エンドポイント・フィールドは任意である。 ツールチェインのセットアップ中またはパイプラインの実行中に、エンドポイントを選択または指定することを推奨します。
デプロイ
アプリケーションをデプロイするインベントリターゲットと Kubernetes クラスタを設定します:
-
デフォルトのアプリ名は
hello-compliance-appです。 -
IBM Cloud API Keyを入力してください。 APIキーは、いくつかのタスクで IBM Cloud CLIツールと対話するために使用されます。
- 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
- 既存のキーをコピー&ペーストすることもできる。
- 新しいキーは、ここで「 New +」をクリックして作成できます。
新しく生成されたAPIキーは、すぐに秘密の保管庫に保存することができる。
-
APIキーが有効で十分なアクセス権がある場合、Container Registry, Container Registry 名前空間, デブ・クラスター地域, リソースグループ, クラスタ名, クラスタ名前空間 が自動的に入力されます。 これらのフィールドは、あなたの設定に合わせて変更することができます。
-
「続行」 をクリックします。
IBM Cloud API キー
APIキーは、いくつかのタスクで ibmcloud CLIツールと対話するために使用されます。
- 既存のAPIキーは、前提条件として作成された既存のシークレットプロバイダ・インタンスからインポートすることができます(推奨)
- 既存のキーをコピー&ペーストすることができる(推奨しない)
- New + をクリックすると、新しいキーを作成できます。もし持っていなければ、
api-keyを生成してください。 新しく生成する API キーは、既存の Key Protect インスタンスにすぐに保存できます。
API Keyフィールドが入力されると、レジストリとクラスタ関連のフィールドが自動的に入力される。
インベントリーのターゲット・ブランチとソース・ブランチ
- Single cluster (push based deployment) を使用して仮想サーバー インスタンスなどのターゲットにアプリケーションをデプロイしたり、デプロイ プロセスをカスタマイズしたりするには、Custom オプションを使用します。
- 続行をクリックしてクラスタページを表示します。
- IBM CloudAPIキー・フィールドを入力し、CLIツールといくつかのタスクでやり取りします。 注意既存の鍵は、鍵アイコンをクリックすることで、秘密金庫からインポートすることができます。
- Verify your クラスター地域, リソースグループ, クラスタ名, and クラスタ名前空間 fields where your target cluster is created.
- 「続行」 をクリックします。
変更要求管理
- IBM Cloud がホストしている Git Repos and Issue Tracking リポジトリを選択し、変更リクエストを管理します。 詳細については、変更管理の自動化 を参照してください。
- 「続行」 をクリックします。
DevOps Insightsツールチェーン
既存の DevOps Insights インスタンスを別のツールチェーンからこのパイプラインにリンクして、CI および CD ツールチェーンパイプラインからのすべてのビルド、デプロイ、およびテストレコードを同じ場所に集めることができるようにします。
CD ツールチェーンは、既存の DevOps Insights インスタンスにデプロイメントレコードをパブリッシュできます。 この機能を有効にするには、既存のDevOps Insightsインスタンスを含むツールチェーンのIDを、DevOps InsightsツールチェーンIDリストで選択して指定します。
- DevOps Insights IBM Cloud API Key を入力します。
- デフォルトの設定を受け入れる。
- 地域、リソースグループ、DevOps Insights toolchain ID、DevOps Insights target environment の各フィールドで、ターゲット環境を作成します。
- 「続行」 をクリックします。
既存のDevOps Insightsツールチェーンへのリンク
DevOps Insights 作成されたツールチェーンにオプションで含めることができ、各コンプライアンス・チェックの証拠が公表される。 ツールチェーンは、既存の DevOps Insights インスタンスを使用して、デプロイメントレコードを insights にパブリッシュすることができる。 統合IDを指定することで、他のツールチェーンから DevOps Insights。
- 現在のツールチェーンを受け入れます。
- 「続行」 をクリックします。
ツールチェーン ID はツールチェーンの URL からコピーできます。 ツールチェーンの URL は次のパターンに従っている: https://cloud.ibm.com/devops/toolchains/<toolchain-ID-comes-here>?env_id=ibm:yp:us-south. URL が https://cloud.ibm.com/devops/toolchains/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee?env_id=ibm:yp:us-south の場合、ツールチェーンのIDは: aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee. URL の完全なURLではなく、IDのみを含めてください。
また、 DevOps Insights インタラクションのターゲット環境を設定することもできる。 このパラメータはオプションで、インベントリのターゲット環境の代わりに使用されます。
オプションのツール
Slack
Slack に、プルリクエストやCIパイプラインのイベントに関する通知を受け取るように設定します。 ツールチェーン作成後にSlackツールを追加することもできる。
- Slackのウェブフックを入力してください。 詳しくは Slackウェブフック をご覧ください。
- メッセージを投稿するには、スラックチャンネルを入力してください。
- スラックチーム名を入力します。 例えば、チーム名が URL
https://team.slack.comの場合、チーム名はteamとなります。 - 自動Slack通知の通知を受け取りたいイベントを選択します。
- 「続行」 をクリックします。
プライベート・ワーカー
デリバリーパイプラインプライベートワーカーツールの統合は、デリバリーパイプラインワークロードを分離して実行できる1つ以上のプライベートワーカーと接続します。 詳しくは、プライベート・ワーカーの操作を参照してください。
- 配送パイプラインプライベートワーカーの 名前 を入力します。
- サービスID APIキーを入力します。
- 好ましい:既存の鍵は、鍵アイコンをクリックしてシークレット保管庫からインポートできます。
- 既存のキーをコピー&ペーストすることもできる。
- 「続行」 をクリックします。
CD ツールチェーンの作成
- 「要約」ページで、 作成をクリックします。
- 画面キャプチャに示すように、ツールチェーンが作成され、サマリーページが表示されるまで待つ。 これには、数分かかることがあります。
パイプラインの作成後に、個々のツールチェーン統合を構成できます。
CD ツールチェーンの探索
プロモーション・パイプラインの実行
プロモーションパイプラインを実行する前に、 CIパイプラインが 正常に実行されたことを確認してください。
-
cd-pipeline をクリックします。
-
手動プロモーション・トリガーパイプラインの実行をクリックします。
-
実行をクリックしてパイプラインを起動します。
-
Manual Promotion Trigger >
#1promotion-pipelinerunパイプラインをクリックします。 プロモーション・パイプラインの実行が完了するのを待ち、実行ログを確認します。プロモーションパイプラインは、
stagingやproductionなどのインベントリターゲット環境ブランチをターゲットとした、masterブランチなどのインベントリソース環境上のインベントリの内容でプルリクエストを作成します。 -
プロモーションパイプラインが正常に終了すると、
promoteタスクログにインベントリリポジトリのプルリクエストへのリンクが表示されます。 プルリクエスト名は、例えばpromote master to prodのように、promote <inventory source environment> to <inventory target environment>という形式です -
ログに記載されているリンクから、ブラウザでプルリクエストを開いてください。 以下のセクションに詳細を記入してください:
- Priority: (必須)
Critical、High、Moderate、Low、Planningのいずれかに設定。 - 変更リクエストの譲受人: (必須)
Email-ID譲受人の名前。 - 追加説明 :アプリケーションの変更に関する説明。
- 目的/目標 :アプリケーションに加えられる変更の目的。
- 影響の説明 :アプリケーションの動作や環境への変更の影響。
- バックアウトプラン: 配備に失敗した場合のバックアウトの手順。
- Priority: (必須)
-
プルリクエストのフィールドに入力し、 保存をクリックします。
-
CIでのコンプライアンス・チェックが失敗し、配備を続ける したい場合は、プル・リクエストに
EMERGENCYラベルを追加する -
Git Repos and Issue Trackingからのプルリクエストをマージしてください。
プルリクエストの詳細は、変更リクエストリポジトリの作成と更新のために実行されるCDパイプラインで使用されます。
CD パイプラインの実行
プロモーション・パイプラインの実行
-
Promotion Pipelineを実行する前に、CIパイプラインが正常に実行されたことを確認する。 -
プロモーションパイプラインは、インベントリソース環境上にインベントリの内容を持つ
Pull Requestを作成します。 たとえば、masterのブランチは、stagingやprodのようなインベントリー・ターゲット環境のブランチをターゲットにしています。 その PR 用に中間ブランチが作成されます。PR がマージされたら、これは廃棄することができます。
プロモーションパイプラインの実行 -
Promotion Pipelineが正常に終了すると、promoteタスクがインベントリリポジトリ内の前述のPull Requestへのリンクを提供します。 プルリクエスト名は以下の形式です:promote <Inventory Source Environment> to <Inventory Target Environment> -
ログに記録されているリンクを使用して、ブラウザーで
Pull Requestを開きます。 各セクションを以下のように記入してください:- 優先度 (Priority): (必須) 重大 (Critical)、高 (High)、中 (Moderate)、低 (Low)、計画 (Planning) のいずれか
- 変更要求の受託者 (Change Request assignee): (必須) 受託者の E メール ID
- 追加の説明 (Additional Description): アプリケーションの変更内容に関する説明
- 目的 (Purpose): アプリケーションに対して行われた変更の目的
- 影響の説明 (Explanation of Impact): アプリケーションの動作や環境への変更の影響
- バックアウトプラン:デプロイに失敗した場合のバックアウトの手順
-
Pull Requestの各フィールドに値を入力して、保存します。 -
Git Repos and Issue Tracking から
Pull Requestをマージする。
Pull Request の詳細は、CDパイプラインがCDパイプラインの実行中に変更要求管理リポジトリに変更要求を作成するために使用される。
CD パイプラインの実行
CDパイプラインは手動または自動でトリガーできる。 CDパイプラインはいつでも手動で起動できますが、前回成功したデプロイメントから変更がない場合、CDパイプラインはデプロイするものがないとして早期に停止します。 Git Repos and Issue Trackingトリガーは、自動CDパイプラインを起動するように設定されていますが、デフォルトでは無効になっており、最初のpromotion.You force-redeploy 変数 を追加して使用することで、コードを変更することなくCDを再実行することができます。 DevSecOps CD パイプラインの成功した画面キャプチャを表示します。
また、いつでも CD Pipelineを手動でトリガーできますが、最後にデプロイメントが正常に実行された後に変更が行われていなければ、CD Pipelineで新たにデプロイされるものは何もありません。
CD パイプラインの正常実行は次のようになります。
CD パイプラインのタスクのフロー:
CDパイプラインが正常に実行されると、prodネームスペースで実行されているサンプルアプリを見つけることができます。 アプリの URL が、CD パイプライン実行の run stage ステップの prod deployment サブステップに表示されます。 その URL を使用して、アプリが稼働中であることを確認できます。