基礎架構即程式碼的持續整合管線

基礎設施即代碼(Infrastructure as Code 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 檔案來自訂階段的相關資訊,請參閱 自訂 Script。 e) 及 管線參數 清單。

用於配置 Terraform 環境定義和變數的參數

對於定義基礎架構即程式碼來源的 Terraform 定義,可以使用表 1 中說明的參數來定義與 Terraform 和 Terraform 相關掃描及檢查相關的環境定義和變數。

配置 Terraform 上下文和變數的參數
內容 預設值 說明
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 要安裝的 Terraform CLI 工具版本 (如果不存在於用於 stages.You 也可以提供 1.5.0-1之類的版本。 以下是 [Terraform 版本清單]。(https://releases.hashicorp.com/terraform/)

相同的參數適用於 IaC CD 部署程序中使用的 Script。 由於 CD 處理程序可以處理多個庫存項目,您可以設定庫存項目的參數範圍。 如果要指定範圍 (庫存項目) 的 Terraform 環境定義和變數,請在內容前面加上庫存項目名稱,例如: <inventory_entry>_。 此字首適用於環境項目 tf-dirTF_VAR_<XXXX>tfvars-repositorytfvars-branchtfvars-files

範例:

hello-iac-sample_TF_VAR_resource_group : Default

在靜態程式碼掃描中進行掃描和檢查

靜態程式碼掃描階段會在指定的 IaC 儲存庫上執行一些靜態程式碼分析器工具。 系統會掃描 pipelinectl save_repo 指令所提供的儲存庫及預設應用程式儲存庫。

您可以使用定義給 靜態程式碼掃描 的任何方法,這些方法可針對應用程式相關的連續整合管線進行配置。

IaC 連續整合管線定義使用表格 2 中的 opt-in-* 參數設為 1 所啟用的其他工具。

掃描或檢查 說明 實現
鋁箔 tflint 執行 tflint $tflint_args --format=json,以警告已廢棄的語法、未使用的宣告,並強制執行最佳實務、命名慣例。 opt-in-tflint 設定為 1
ft fmt 執行 terraform fmt -check,將 Terraform 配置檔案重寫為標準格式和樣式。 opt-in-terraform-fmtvalidate 設定為 1
IaC 靜態掃描工具參數
名稱 類型 預設值 說明 必要或選用
opt-in-terraform-fmt-validate text static-scan 階段中執行 terraform fmtterraform validate 指令。 選用
opt-in-tflint text static-scan 階段中執行 tflint 指令。 選用
tflint-version text v0.53.0 指出要安裝的 tflint 版本 (如果未在用於 static-scan 暫置執行的映像檔中提供的話)。 選用
tflint-config text 用於 tflint 的配置檔。 optional
tflint-args text 在工具呼叫期間傳遞給 tflint 的指令引數。 選用

掃描並移入相符性檢查

針對應用程式相關連續整合管線定義的 相符性檢查 也會針對 IaC 連續整合管線執行。

IaC CI 管線會執行一些使用 opt-in- 特性啟用的其他檢查。

IaC CI 管線會使用設為 1opt-in- 參數來定義更多已啟用的工具。

IaC額外合規性掃描和檢查
掃描或檢查 說明 實現
cra-tf 使用 IBM Cloud CRA 工具 中的 ibmcloud cra terraform-validate 指令來分析 Terraform 計劃是否符合標準 opt-in-cra-tf-validate 設為 1
tfsec 使用 TFsec 工具來尋找潛在的配置錯誤,並建立相符性問題。 opt-in-tfsec 設為 1
checkov 使用 Checkov 工具來尋找配置錯誤並建立相符性問題。 opt-in-checkov 設為 1
IaC合規性掃描並檢查設定參數
內容 預設值 說明
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 JSON 檔案的路徑,其中包含要從 ibmcloud cra terraform-validate 報告忽略的規則清單。 如需檔案格式的相關資訊,請參閱 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 將停止支援。 任何現有的服務實例均無法運作。

這些 Script 會在管線所知道的所有儲存庫上執行。 若要將儲存庫新增至這些掃描,請使用設定階段中提供的 pipelinectl 介面。 如需相關資訊,請參閱 pipelinectl

如需使用者 Script 階段預期輸出的相關資訊,請參閱 自訂 Script

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 中的特定參數來配置預設建置特性。

建構工件配置參數
內容 預設值 說明
configuration-name Git 儲存庫名稱的 "humanish" 部分。 IaC 配置的名稱。 用於 IaC CI 管線所建置的構件檔名及庫存項目。
build-ignore-file 忽略清單檔的路徑 (用於 tar --exclude-from)

如需如何在自訂 Script 階段中存取參數及密碼的相關資訊,請參閱 自訂 Script

構件符號

簽署構件階段提供使用 GPG 金鑰為一或多個構件建立分離的簽章檔案的預設行為。

建構神器GPG金鑰
內容 說明
signing-key 用於一或多個構件之分離簽章的 ascii 版本的 GPG 私密金鑰值

若要使用不同的簽署程序,請使用專案中的 .pipeline-config.yaml 配置來自訂此階段。

部署至開發

部署階段會將配置構件部署至開發環境。 您可以從 管線使用者介面中的變數管線觸發 Webhook 有效負載,提供此階段的變數及認證。

作為共用基本映像檔的一部分提供的 Script 可以協助使用 Schematics 或 Terraform CLI 來執行部署。 表 8 和表 9 說明用於配置部署動作之 Script 的參數。

使用 Schematics 作為部署工具的配置參數

使用Schematics作為部署工具的設定參數
內容 預設值 說明
schematics-ibmcloud-api-key 改寫用於 Schematics 相關動作 (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 版本 用於要建立的 Schematics 工作區的 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 作為部署工具
內容 說明
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 狀態的相關資訊,請參閱: 將 Terraform 狀態儲存在 Cloud Object Storage
  • 如果要在 IaC CD 部署程序中配置 Script,請定義以庫存項目為範圍的參數。 如果要指定範圍 (庫存項目) 的 Terraform CLI as deployment tool 相關環境內容,請在內容前面加上庫存項目名稱,例如: <inventory_entry>_。 此字首適用於所有與示意圖相關的環境項目。

範例:

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

發貨至庫存

使用 release to Inventory 使用者 Script 階段,以使用 cocoa inventory add CLI 指令將構件新增至庫存。 如需 cocoa inventory add 的相關資訊,請參閱 cocoa inventory add

您可以使用 pipelinectl 介面,利用 list_reposload_repolist_artifactsload_artifact 指令來存取您的儲存庫和構件。 如需相關資訊,請參閱 pipelinectl

在建置上收集法規遵循資料

當管線順利執行時,您可以收集建置的相關資訊。

所有檢查、掃描、測試和構件簽署都會收集證明,並放在證明櫃中。 管線日誌檔也會連同管線資料本身一起儲存至包含 Tekton 定義的鎖定器。 在此步驟中也會收集同層級檢閱的相符性資料。 管線會使用 pipelinectl 來搜尋具有自前次建置以來已合併之取回要求的儲存庫。 管線也會檢查 PR 檢閱狀態,將它儲存為構件,並根據結果建立證明。

最終 Script 是根據證明狀態將管道狀態標示為綠色或紅色的評估器。 如果有任何失敗,則持續整合執行會標示為紅色。