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 ファイルを使用してステージをカスタマイズする方法の詳細については、 カスタムスクリプトを 参照してください。 e) および 「パイプライン・パラメーター」 がリストされます。

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などのバージョンを指定することもできます。 [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 に設定して使用可能にすることで、追加のツールを定義します。

スキャンまたは検査 説明 有効化
トゥフリント tflint $tflint_args --format=json をtflint から実行し、非推奨の構文、未使用の宣言について警告し、ベストプラクティス、命名規則を強制する。 opt-in-tflint 1に設定する
エフエムティー terraform fmt -checkfmt から実行して、Terraform 構成ファイルを標準的な形式とスタイルに書き換えます。 opt-in-terraform-fmtvalidate 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-validate1 に設定されます。
tfsec TFsec ツールを使用して、潜在的な構成の誤りを検出し、コンプライアンスの問題を作成します。 opt-in-tfsec set to 1
checkov Checkov ツールを使用して、構成の誤りを見つけ、コンプライアンスの問題を作成します。 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`` The tfsec バージョン。
tfsec-args tfsec コマンド引数。
opt-in-checkov 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 によって定義されるファイルの予期されるフォーマット。 この書式は、 terraform-validate コマンド用のクラシック・プロファイル・ファイル例 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 の特定のパラメーターを使用して構成できます。

ビルド・アーティファクト設定パラメータ
プロパティー (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 を参照してください。

list_reposload_repolist_artifactsload_artifact コマンドを使用して、 pipelinectl インターフェイスを使用してレポや成果物にアクセスできます。 詳しくは、 pipelinectl を参照してください。

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

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

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

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