IBM Cloud Docs
Infrastructure as Code 用の継続的統合パイプライン

Infrastructure as Code 用の継続的統合パイプライン

Infrastructure as Code (IaC) の継続的統合パイプラインは、 IaC リポジトリー (Terraform コンテンツ) からデプロイ可能な構成を作成します。

このパイプラインは、成果物をビルドする前に、プル要求の処理と同じようにコードがスキャンされてテストされていることを検査します。 構築された成果物は、リリースおよびインベントリへの展開の準備が整ったとマークされる前に、脆弱性がスキャンされ、パイプラインで署名されます。 詳しくは、 インベントリー を参照してください。 プル要求パイプラインとは異なり、継続的統合パイプラインは、ビルドの各ステージ (テスト、スキャン、署名など) でエビデンスと結果の成果物を収集します。 このデータは、ビルドされた成果物に対応しているので、デプロイメント・プロセスと変更管理で追跡できます。

ステージとタスク

表 1. IaC ステージおよびタスクの継続的統合
タスクまたはステージ 簡略説明 .pipeline-config.yaml でカスタマイズ可能か
start パイプライン環境を設定します。 いいえ
setup ビルドおよびテスト環境を設定します。 ある
test 構成 IaCに対して単体テストを実行します。 ある
static-scan IaCで静的スキャン・コードを実行します。 ある
compliance-checks アプリ リポジトリに対してコード リスク アナライザー スキャンやその他のコンプライアンス チェックを実行します。 ある
build-artifact 構成に対応する成果物をビルドします。 ある
sign-artifact ビルドされた成果物に署名します。 ある
deploy ビルドされた成果物を使用して、構成を開発環境にデプロイします。 ある
acceptance-test 開発環境にデプロイされた構成に対して受け入れテストと統合テストを実行します。 ある
release 構築されたアーティファクトをインベントリに追加します。 ある
finish ログ ファイル、アーティファクト、証拠を収集、作成し、証拠ロッカーにアップロードします。 いいえ

ステージをカスタマイズする方法の詳細については、.pipeline-config.yaml ファイルを参照 カスタムスクリプト。 e) および 「パイプライン・パラメーター」 がリストされます。

Terraform コンテキストおよび変数を構成するためのパラメーター

Infrastructure as Code ソースを定義する Terraform 定義の場合、表 1 で説明されているパラメーターを使用して、Terraform および Terraform 関連のスキャンとチェックに関連するコンテキストと変数を定義できます。

表 2. Terraform コンテキストおよび変数を構成するためのパラメーター
プロパティー (Property) デフォルト 説明
tf-dir . main.tf が配置されているソース・リポジトリー内の場所またはパス。
TF_VAR_<XXXX> Terraform 変数 <XXXX> の値を指定するパイプラインまたはトリガーのプロパティー (保護されているものと保護されていないもの)
tfvars-repository インフラストラクチャー・ソース・コードの Git リポジトリー。 tfavars ファイルを含む Git リポジトリー。 リポジトリーはツールチェーンで宣言する必要があります。
tfvars-branch main tfvars ファイルが含まれている Git リポジトリーのブランチ。
tfvars-files Terraform 変数の値を含むファイル。
terraform-version 1.2.9 stages.You 1.5.0-1などのバージョンを指定することもできます。 [Terraform のバージョンのリスト]を以下に示します。(https://releases.hashicorp.com/terraform/)

IaC CD デプロイメント・プロセスで使用されるスクリプトにも同じパラメーターが適用されます。 CD プロセスは複数のインベントリー項目を処理できるため、インベントリー項目のパラメーターの範囲を指定することができます。 スコープ (インベントリー・エントリー) の Terraform コンテキストと変数を指定するには、プロパティーの前にインベントリー・エントリー名を付けます (例: <inventory_entry>_)。 この接頭部は、環境エントリー tf-dirTF_VAR_<XXXX>tfvars-repositorytfvars-branch、および tfvars-files に適用されます。

例:

hello-iac-sample_TF_VAR_resource_group : Default

静的コード・スキャン

静的コード・スキャン・ステージは、指定された IaC リポジトリーに対して多数の静的コード・アナライザー・ツールを実行します。 pipelinectl save_repo コマンドによって指定されるリポジトリーとデフォルトのアプリ・リポジトリーがスキャンされます。

アプリケーション関連の継続的統合パイプラインに対して構成可能な 静的コード・スキャン 用に定義されているいずれかの方法を使用できます。

IaC 継続的統合パイプラインは、表 2 の opt-in-* パラメーターを 1 に設定して使用可能にすることで、追加のツールを定義します。

表 3. IaC 静的スキャン・ツール・パラメーター
名前 タイプ デフォルト 説明 必須またはオプション
opt-in-terraform-fmt-validate text static-scan ステージで terraform fmt コマンドと terraform validate コマンドを実行します。 オプション
opt-in-tflint text static-scan ステージで tflint コマンドを実行します。 オプション
tflint-version text v0.46.1 static-scan ステージの実行に使用されるイメージで提供されていない場合にインストールする tflint バージョンを示します。 オプション
tflint-config text tflint に使用する構成ファイル。 オプション
tflint-args text ツール呼び出し時に tflint に渡されるコマンド引数。 オプション

コンプライアンス検査でのスキャンと検査

アプリケーション関連の継続的統合パイプラインに対して定義された コンプライアンス検査 は、 IaC 継続的統合パイプラインに対しても実行されます。

IaC CI パイプラインは、 opt-in- 機能を使用して有効にされたいくつかの追加検査を実行します。

IaC CI パイプラインは、1 に設定された opt-in- パラメーターを使用して使用可能にする追加のツールを定義します。

表 4。 IaC 追加のコンプライアンス・スキャンおよびチェック
スキャンまたは検査 説明 有効化
cra-tf IBM Cloud CRA ツール から ibmcloud cra terraform-validate コマンドを使用して、Terraform プランのコンプライアンスを分析します。 opt-in-cra-tf-validate1 に設定されます。
tfsec TFsec ツールを使用して、潜在的な構成の誤りを検出し、コンプライアンスの問題を作成します。 opt-in-tfsec set to 1
checkov Checkov ツールを使用して、構成の誤りを見つけ、コンプライアンスの問題を作成します。 opt-in-checkov set to 1
表 5. IaC コンプライアンス・スキャンおよびチェックの構成パラメーター
プロパティー (Property) デフォルト 説明
opt-in-cra-tf-validate ibmcloud cra terraform-validate ツールを使用して準拠性検査を実行するためのフラグ。
cra-tf-policy-file ポリシー プロファイル ファイルへのパス。 詳しくは、 Terraform コマンド・オプション を参照してください。
cra-tf-scc-instance-name デフォルトでは、ツールチェーンで構成された Security and Compliance Center ツール統合になります。 cra terraform validate コマンドを構成するためにプロファイルおよび添付ファイルをフェッチするために使用される Security and Compliance Center ツール統合の名前。
cra-tf-ignore-rules ibmcloud cra terraform-validate レポートから無視されるルールのコンマ区切りリスト。
cra-tf-ignore-rules-file ibmcloud cra terraform-validate レポートから無視するルールのリストが含まれている JSON ファイルへのパス。 ファイル・フォーマットについて詳しくは、 cra-tf-ignore-rules-file のフォーマット を参照してください。
opt-in-tfsec tfsec ツールを使用して準拠性検査を実行するためのフラグ。
tfsec-version 使用する `v1.21.0`` The tfsec バージョン。
tfsec-args tfsec コマンド引数。
opt-in-checkov checkov ツールを使用して準拠性検査を実行するためのフラグ。
checkov-image bridgecrew/checkov checkov 準拠性検査を実行するイメージ。
checkov-args checkov コマンド引数。

これらのスクリプトは、パイプラインが認識しているすべてのリポジトリで実行されます。 これらのスキャンにリポジトリを追加するには、pipelinectl セットアップ段階で提供されるインターフェース。 細については、 pipelinectlを参照してください。

ユーザー・スクリプトの各ステージからの予想される出力について詳しくは、カスタム・スクリプトを参照してください。

cra-tf-ignore-rules-file のフォーマット

cra-tf-ignore-rules-file format によって定義されるファイルの予期されるフォーマット。 このフォーマットは、 terraform-validate コマンドの SCC V2 クラシック・プロファイル・ファイル にあるフォーマット ( scc_parameters フィールドなし) と似ています。

cra-tf-ignore-rules-file ファイルの内容例:

{
    "scc_rules": [
        {
            "scc_rule_id": "rule-8cbd597c-7471-42bd-9c88-36b2696456e9"
        },
        {
            "scc_rule_id": "rule-c97259ee-336d-4c5f-b436-1868107a9558"
        }
    ]
}

ビルド成果物

ビルドアーティファクトステージでは、独自のアーティファクトをビルドできます。 IaC CI パイプラインの場合、デフォルトのビルド機能により、Terraform 構成を含む Tar ファイルが作成されます。

デフォルトのビルド機能は、表 5 の特定のパラメーターを使用して構成できます。

表 6. ビルド成果物構成パラメーター
プロパティー (Property) デフォルト 説明
configuration-name Git リポジトリー名の「humanish」の部分。 の名前IaC構成。 IaC CI パイプラインによって作成される成果物ファイル名およびインベントリー項目に使用されます。
build-ignore-file 無視リスト・ファイルへのパス ( tar --exclude-from に使用)

カスタム・スクリプト・ステージでパラメーターとシークレットにアクセスする方法について詳しくは、カスタム・スクリプトを参照してください。

成果物の署名

署名成果物ステージは、GPG キーを使用して 1 つ以上の成果物の切り離された署名ファイルを作成するためのデフォルトの動作を提供します。

表 7。 ビルド成果物 GPG キー
プロパティー (Property) 説明
signing-key 1 つ以上の成果物の切り離された署名の ASCII バージョンに使用される GPG 秘密鍵の値

別の署名プロセスを使用するには、プロジェクトの .pipeline-config.yaml 構成を使用してこのステージをカスタマイズします。

開発にデプロイ

デプロイ・ステージでは、構成成果物を開発環境にデプロイします。 このステージの変数と資格情報は、パイプライン UI の変数およびパイプライン・トリガー Webhook ペイロードから指定できます。

Common Base Image の一部として提供されるスクリプトは、Schematics または Terraform CLI を使用してデプロイメントを実行するのに役立ちます。 デプロイメント・アクションのスクリプトを構成するためのパラメーターについては、表 8 および表 9 で説明します。

Schematics をデプロイメント・ツールとして使用するための構成パラメーター

表 8。 Schematics をデプロイメント・ツールとして使用するための構成パラメーター
プロパティー (Property) デフォルト 説明
schematics-ibmcloud-api-key Schematics 関連のアクション (図式ワークスペースの取得/作成、計画 & 適用) に使用される ibmcloud-api-key を上書きします。
schematics-workspace-name <schematics-workspace-prefix><toolchain name>-<pipeline id> 使用するワークスペース、または存在しない場合は作成するワークスペース。 ワークスペースが存在する場合は、 Git リポジトリーへのリンクなしで作成されたワークスペースでなければなりません。 詳しくは、 Schematics ワークスペースの作成 を参照してください。 この制限は、スクリプトが Schematics ワークスペース・アップロード を使用して IaC 構成成果物を tar ファイルとしてアップロードするためです。
schematics-workspace-prefix デプロイメント・アクションにワークスペースが指定されていない場合に、ワークスペースの作成に使用される接頭部。
schematics-workspace-resource-group デフォルトは、ツールチェーンのリソース・グループです。 Schematics ワークスペースの作成に使用されるリソース・グループ。
schematics-workspace-region デフォルトはツールチェーンのリージョンです。 Schematics ワークスペースの作成に使用される領域。
schematics-workspace-netrc 既知のリポジトリーから計算されます。 作成される Schematics ワークスペースの netrc 構成の値。 詳しくは、 プライベート・リモート・ホストからモジュールをダウンロードするためのサポート を参照してください。
schematics-workspace-terraform-version デフォルトは、 ibmcloud schematics version --output JSON を使用して取得された schematics Terraform のバージョンです。 作成する図式ワークスペースに使用される Terraform のバージョン。 Schematics イメージおよびパッケージされた Terraform プロバイダーの概要 を参照してください。

IaC CD デプロイメント・プロセスでスクリプトを構成するには、特定のインベントリー項目に対してスコープ設定されるパラメーターを定義します。 特定のスコープ (インベントリー・エントリー) に対して Schematics as deployment tool 関連環境プロパティーを指定するには、プロパティーの前にインベントリー・エントリー名を付けます (例: <inventory_entry>_)。 この接頭部は、すべての schematics 関連の環境エントリー ( schematics-ibmcloud-api-key を除く) に適用されます。

例:

hello-iac-sample_schematics-workspace-name : workspace-for-deployment-of-hello-iac-sample

デプロイメント・ツールとして Terraform CLI を使用するための構成

表 9。 デプロイメント・ツールとして Terraform CLI を使用するための構成
プロパティー (Property) 説明
tf-backend-s3-bucket 状態を保管するバケット名。
tf-backend-s3-key 状態を永続化するために使用する名前。
tf-backend-s3-region 地域Cloud Object Storage実例。
tf-backend-s3-endpoint Cloud Object Storage終点。
tf-backend-s3-access_key 資格情報の HMAC access_key サブセクション。
tf-backend-s3-secret_key 資格情報の HMAC secret_key サブセクション。

以下の点に注意してください。

  • Cloud Object Storage エンドポイントまたはバケットを使用して Terraform 状態を保管する方法について詳しくは、 Cloud Object Storageを参照してください。
  • IaC CD デプロイメント・プロセスでスクリプトを構成するには、インベントリー項目を有効範囲とするパラメーターを定義します。 スコープ (インベントリー・エントリー) の Terraform CLI as deployment tool 関連の環境プロパティーを指定するには、プロパティーの前にインベントリー・エントリー名を付けます (例: <inventory_entry>_)。 この接頭部は、すべての schematics 関連の環境エントリーに適用されます。

例:

hello-iac-sample_tf-backend-s3-bucket : bucket-to-store-tfstate-of-hello-iac-sample

インベントリーへのリリース

「インベントリーへのリリース」ユーザー・スクリプト・ステージを使用して、cocoa inventory add CLI コマンドを使用して成果物をインベントリーに追加します。 cocoa inventory add について詳しくは、 cocoa inventory add を参照してください。

あなたは pipelinectl リポジトリや成果物にアクセスするためのインターフェース list_reposload_repolist_artifacts 、 そして load_artifact コマンド。 詳しくは、 pipelinectl を参照してください。

ビルドに関するコンプライアンス・データの収集

パイプラインが正常に実行されると、ビルドに関する情報を収集できます。

すべてのチェック、スキャン、テスト、アーティファクトの署名から証拠が収集され、証拠ロッカーに保管されます。 パイプラインのログ・ファイルも、Tekton 定義が含まれるパイプライン・データそのものと一緒にロッカーに保存されます。 ピア・レビューに対するコンプライアンス・データもこのステップで収集されます。 パイプラインは、pipelinectl を使用して、最終ビルド以降にマージされたプル要求が入っているリポジトリーを検索します。 パイプラインは PR レビューのステータスもチェックし、それをアーティファクトとして保存し、結果に基づいて証拠を作成します。

最後のスクリプトはエバリュエーターです。エビデンスの状況に基づいてパイプライン状況を緑または赤にマーク付けします。 失敗があった場合、継続的インテグレーションの実行は赤でマークされます。