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

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

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

ステージとタスク

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

.pipeline-config.yaml ファイルを使用してステージをカスタマイズする方法の詳細については、「 カスタムスクリプト 」および「 パイプラインパラメータ の一覧」を参照してください。

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

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

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などのバージョンを指定することもできます。 こちらが [list of Terraform versions] です。( https://releases.hashicorp.com/terraform/ )

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

次に例を示します。

hello-iac-sample_TF_VAR_resource_group : Default

静的コードスキャンによるスキャンとチェック

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

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

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

スキャンまたは検査 説明 有効化
トゥフリント tflint $tflint_args --format=json をtflint から実行し、非推奨の構文、未使用の宣言について警告し、ベストプラクティス、命名規則を強制する。 opt-in-tflint 1に設定する
fmt および validate fmtから terraform fmt -check を実行してTerraformの設定ファイルの書式の一貫性をチェックし、 terraform validate を実行して設定の有効性を検証します。 opt-in-terraform-fmt-validate 1に設定する
IaC 静的スキャンツールのパラメータ
名前 タイプ デフォルト 説明 必須またはオプション
opt-in-terraform-fmt-validate text static-scan ステージで terraform fmt コマンドと terraform validate コマンドを実行します。 オプション
opt-in-tflint text static-scan ステージで tflint コマンドを実行します。 オプション
tflint-version text v0.53.0 static-scan ステージの実行に使用されるイメージで提供されていない場合にインストールする tflint バージョンを示します。 オプション
tflint-config text tflint に使用する構成ファイル。 オプション
tflint-args text ツール呼び出し時に tflint に渡されるコマンド引数。 オプション

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

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

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

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

IaC追加コンプライアンス・スキャンとチェック
スキャンまたは検査 説明 有効化
cra-tf IBM Cloud CRA ツール から ibmcloud cra terraform-validate コマンドを使用して、Terraform プランのコンプライアンスを分析します。 opt-in-cra-tf-validate は 1 に設定されます。
tfsec TFsec ツールを使用して、潜在的な構成の誤りを検出し、コンプライアンスの問題を作成します。 opt-in-tfsec set to 1
checkov (Terraform プラン) Checkov ツールを使用して、生成された Terraform プランをスキャンし、設定ミスやコンプライアンス上の問題がないかを確認します。 opt-in-checkov set to 1
IaCコンプライアンス・スキャンと構成パラメータのチェック
プロパティー (Property) デフォルト 説明
opt-in-cra-tf-validate ibmcloud cra terraform-validate ツールを使用して準拠性検査を実行するためのフラグ。
cra-tf-policy-file ポリシープロファイルファイルへのパス。 詳細については、「 Terraform コマンドのオプション 」を参照してください。
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 使用する tfsec のバージョン。
tfsec-args tfsec コマンド引数。
opt-in-checkov Terraformのplanフレームワークで checkov ツールを使用してコンプライアンスチェックを実行するためのフラグ。
checkov-version 空の値は最新バージョンを意味する checkov のバージョンをインストールする。
checkov-args checkov コマンド引数。

2025年12月15日より、 IBM Cloud Security and Compliance Center は非推奨となります。 既存のサービスインスタンスはすべて機能していません。

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

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

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

cra-tf-ignore-rules-file format によって定義されるファイルの予期されるフォーマット。

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 の特定のパラメーターを使用して構成できます。

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

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

成果物の署名

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

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

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

開発にデプロイ

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

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

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

デプロイツールとして「Schematics使用するための設定パラメータ
プロパティー (Property) デフォルト 説明
schematics-ibmcloud-api-key Schematics 関連のアクション (図式ワークスペースの取得/作成、計画 & 適用) に使用される ibmcloud-api-key を上書きします。
schematics-workspace-name <schematics-workspace-prefix><toolchain name>-<pipeline id> 使用するワークスペース、または存在しない場合は作成するワークスペース。 ワークスペースが存在する場合、それは Git リポジトリへのリンクなしで作成されたワークスペースでなければなりません。 詳細については、 ワークスペース Schematics の作成を 参照してください。 この制限は、スクリプトが設定 IaC アーティファクトをファイル tar としてアップロードするためです。具体的には、 Schematics ワークスペースアップロード を使用しています。
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 プロバイダーの概要 を参照してください。

CD IaC デプロイメントプロセスでスクリプトを設定するには、特定のインベントリエントリに対してスコープが設定されたパラメータを定義します。 特定のスコープ (インベントリー・エントリー) に対して 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 を使用するための構成

デプロイツールとして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_repos、 load_repo、 list_artifacts、 load_artifact 各コマンドを通じて、リポジトリやアーティファクトにアクセスできます。 詳しくは、 pipelinectl を参照してください。

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

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

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

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