Infrastructure as Code 用の継続的統合パイプライン
Infrastructure as Code (IaC) の継続的統合パイプラインは、 IaC リポジトリー (Terraform コンテンツ) からデプロイ可能な構成を作成します。
このパイプラインは、成果物をビルドする前に、プル要求の処理と同じようにコードがスキャンされてテストされていることを検査します。 構築された成果物は、リリースおよびインベントリへの展開の準備が整ったとマークされる前に、脆弱性がスキャンされ、パイプラインで署名されます。 詳しくは、 インベントリー を参照してください。 プル要求パイプラインとは異なり、継続的統合パイプラインは、ビルドの各ステージ (テスト、スキャン、署名など) でエビデンスと結果の成果物を収集します。 このデータは、ビルドされた成果物に対応しているので、デプロイメント・プロセスと変更管理で追跡できます。
ステージとタスク
タスクまたはステージ | 簡略説明 | .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 関連のスキャンとチェックに関連するコンテキストと変数を定義できます。
プロパティー (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-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
に設定して使用可能にすることで、追加のツールを定義します。
名前 | タイプ | デフォルト | 説明 | 必須またはオプション |
---|---|---|---|---|
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-
パラメーターを使用して使用可能にする追加のツールを定義します。
スキャンまたは検査 | 説明 | 有効化 |
---|---|---|
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 |
Checkov ツールを使用して、構成の誤りを見つけ、コンプライアンスの問題を作成します。 | opt-in-checkov set to 1 |
プロパティー (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 の特定のパラメーターを使用して構成できます。
プロパティー (Property) | デフォルト | 説明 |
---|---|---|
configuration-name |
Git リポジトリー名の「humanish」の部分。 | の名前IaC構成。 IaC CI パイプラインによって作成される成果物ファイル名およびインベントリー項目に使用されます。 |
build-ignore-file |
無視リスト・ファイルへのパス ( tar --exclude-from に使用) |
カスタム・スクリプト・ステージでパラメーターとシークレットにアクセスする方法について詳しくは、カスタム・スクリプトを参照してください。
成果物の署名
署名成果物ステージは、GPG キーを使用して 1 つ以上の成果物の切り離された署名ファイルを作成するためのデフォルトの動作を提供します。
プロパティー (Property) | 説明 |
---|---|
signing-key |
1 つ以上の成果物の切り離された署名の ASCII バージョンに使用される GPG 秘密鍵の値 |
別の署名プロセスを使用するには、プロジェクトの .pipeline-config.yaml
構成を使用してこのステージをカスタマイズします。
開発にデプロイ
デプロイ・ステージでは、構成成果物を開発環境にデプロイします。 このステージの変数と資格情報は、パイプライン UI の変数およびパイプライン・トリガー Webhook ペイロードから指定できます。
Common Base Image の一部として提供されるスクリプトは、Schematics または Terraform CLI を使用してデプロイメントを実行するのに役立ちます。 デプロイメント・アクションのスクリプトを構成するためのパラメーターについては、表 8 および表 9 で説明します。
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 を使用するための構成
プロパティー (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
レビューのステータスもチェックし、それをアーティファクトとして保存し、結果に基づいて証拠を作成します。
最後のスクリプトはエバリュエーターです。エビデンスの状況に基づいてパイプライン状況を緑または赤にマーク付けします。 失敗があった場合、継続的インテグレーションの実行は赤でマークされます。