基礎架構即程式碼的持續整合管線
基礎設施即代碼(Infrastructure as Code IaC )的持續整合管道,會從 IaC 儲存庫(Terraform 內容)中建構可部署的配置。
在建置構件之前,管線會以處理取回要求的相同方式來檢查是否掃描及測試程式碼。 建置的構件也會掃描是否有漏洞,並在管線中簽署,然後才將它們標示為備妥以在庫存中發行及部署。 如需相關資訊,請參閱 庫存。 與取回要求管線不同,持續整合管線會在建置的每一個階段收集證明及結果構件,例如測試、掃描及簽署。 此資料會與建置的構件產生關聯,並且可以透過部署程序和變更管理來追蹤。
階段和作業
| 作業或階段 | 簡要說明 | 可在 .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 相關掃描及檢查相關的環境定義和變數。
| 內容 | 預設值 | 說明 |
|---|---|---|
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-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 $tflint_args --format=json,以警告已廢棄的語法、未使用的宣告,並強制執行最佳實務、命名慣例。 |
opt-in-tflint 設定為 1 |
| ft | 從 fmt 執行 terraform fmt -check,將 Terraform 配置檔案重寫為標準格式和樣式。 |
opt-in-terraform-fmtvalidate 設定為 1 |
| 名稱 | 類型 | 預設值 | 說明 | 必要或選用 |
|---|---|---|---|---|
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 |
指出要安裝的 tflint 版本 (如果未在用於 static-scan 暫置執行的映像檔中提供的話)。 |
選用 |
tflint-config |
text | 用於 tflint 的配置檔。 |
optional | |
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 設為 1 |
checkov |
使用 Checkov 工具來尋找配置錯誤並建立相符性問題。 | opt-in-checkov 設為 1 |
| 內容 | 預設值 | 說明 |
|---|---|---|
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 金鑰為一或多個構件建立分離的簽章檔案的預設行為。
| 內容 | 說明 |
|---|---|
signing-key |
用於一或多個構件之分離簽章的 ascii 版本的 GPG 私密金鑰值 |
若要使用不同的簽署程序,請使用專案中的 .pipeline-config.yaml 配置來自訂此階段。
部署至開發
部署階段會將配置構件部署至開發環境。 您可以從 管線使用者介面中的變數 及 管線觸發 Webhook 有效負載,提供此階段的變數及認證。
作為共用基本映像檔的一部分提供的 Script 可以協助使用 Schematics 或 Terraform CLI 來執行部署。 表 8 和表 9 說明用於配置部署動作之 Script 的參數。
使用 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 作為部署工具的配置
| 內容 | 說明 |
|---|---|
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_repos、load_repo、list_artifacts 和 load_artifact 指令來存取您的儲存庫和構件。 如需相關資訊,請參閱 pipelinectl。
在建置上收集法規遵循資料
當管線順利執行時,您可以收集建置的相關資訊。
所有檢查、掃描、測試和構件簽署都會收集證明,並放在證明櫃中。 管線日誌檔也會連同管線資料本身一起儲存至包含 Tekton 定義的鎖定器。 在此步驟中也會收集同層級檢閱的相符性資料。 管線會使用 pipelinectl 來搜尋具有自前次建置以來已合併之取回要求的儲存庫。 管線也會檢查 PR 檢閱狀態,將它儲存為構件,並根據結果建立證明。
最終 Script 是根據證明狀態將管道狀態標示為綠色或紅色的評估器。 如果有任何失敗,則持續整合執行會標示為紅色。