IBM Cloud Docs
基础架构即代码的持续集成管道

基础架构即代码的持续集成管道

“基础结构即代码”的持续集成管道 (IaC) 从 IaC 存储库 (Terraform 内容) 构建可部署配置。

在构建工件之前,管道会以处理拉取请求的相同方式检查代码是否已扫描和测试。 在将已构建的工件标记为准备好在库存中进行发布和部署之前,还会在管道中扫描这些工件以查找漏洞并进行签名。 有关更多信息,请参阅 库存。 与拉取请求管道不同,持续集成管道在构建的每个阶段 (例如测试,扫描和签名) 上收集证据和结果工件。 此数据与构建的工件相关,可通过部署过程和变更管理进行跟踪。

阶段和任务

表 1. 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 上下文和变量的参数

对于定义基础结构即代码源的 Terraform 定义,可以使用表 1 中描述的参数来定义与 Terraform 和 Terraform 相关的扫描和检查相关的上下文和变量。

表 2. 用于配置 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 部署过程中使用的脚本。 因为 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 连续集成管道定义了更多工具,这些工具通过使用设置为 1 的表 2 中的 opt-in-* 参数来启用。

表 3。 IaC 静态扫描工具参数
名称 类型 缺省值 描述 必需或可选
opt-in-terraform-fmt-validate text static-scan 阶段中运行 terraform fmtterraform validate 命令。 可选
opt-in-tflint text static-scan 阶段中运行 tflint 命令。 可选
tflint-version text v0.46.1 指示要安装的 tflint 版本 (如果未在用于 static-scan 阶段执行的映像中提供)。 可选
tflint-config text 要用于 tflint 的配置文件。 可选
tflint-args text 在工具调用期间传递到 tflint 的命令自变量。 可选

扫描并检查一致性检查

还会对 IaC 连续集成管道执行针对与应用程序相关的持续集成管道定义的 合规性检查

IaC CI 管道执行一些其他检查,这些检查是使用 opt-in- 功能部件启用的。

IaC CI 管道定义了更多使用设置为 1opt-in- 参数启用的工具。

表 4. 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
表 5. IaC 合规性扫描和检查配置参数
属性 缺省 描述
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 JSON 文件的路径,该文件包含要从 ibmcloud cra terraform-validate 报告中忽略的规则列表。 有关文件格式的更多信息,请参阅 Format for 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 中的特定参数来配置缺省构建功能。

表 6. 构建工件配置参数
属性 缺省 描述
configuration-name Git 存储库名称的“人性化”部分。 名称IaC配置。 用于 IaC CI 管道构建的工件文件名和库存条目。
build-ignore-file 忽略列表文件的路径 (用于 tar --exclude-from)

有关如何访问定制脚本阶段中的参数和私钥的更多信息,请参阅 定制脚本

工件符号

Sign 工件阶段提供了使用 GPG 密钥为一个或多个工件创建拆离签名文件的缺省行为。

表 7. 构建工件 GPG 密钥
属性 描述
signing-key 用于一个或多个工件的已拆离特征符的 ascii 版本的 GPG 专用密钥值

要使用其他签名过程,请使用项目中的 .pipeline-config.yaml 配置来定制此阶段。

部署到开发

部署阶段将配置工件部署到开发环境中。 您可以从 管道 UI 中的变量管道触发器 Webhook 有效内容 提供此阶段的变量和凭证。

作为公共基本映像的一部分提供的脚本可帮助使用示意图或 Terraform CLI 执行部署。 用于配置部署操作的脚本的参数在表 8 和表 9 中进行了描述。

用于将 Schematics 用作部署工具的配置参数

表 8. 要将 Schematics 用作部署工具的配置参数
属性 缺省 描述
schematics-ibmcloud-api-key 覆盖用于示意图相关操作 (示意图工作空间检索/创建,计划和应用) 的 ibmcloud-api-key
schematics-workspace-name <schematics-workspace-prefix><toolchain name>-<pipeline id> 要使用或要创建的工作空间 (如果不存在)。 如果该工作空间存在,那么它必须是在未链接到 Git 存储库的情况下创建的工作空间。 有关更多信息,请参阅 Schematics 工作空间创建。 此限制是因为脚本使用 Schematics Workspace upload 将 IaC 配置工件上载为 tar 文件。
schematics-workspace-prefix 当没有为部署操作指定工作空间时,用于创建工作空间的前缀。
schematics-workspace-resource-group 缺省为工具链的资源组。 要用于创建示意图工作空间的资源组。
schematics-workspace-region 缺省为工具链的区域。 要用于创建示意图工作空间的区域。
schematics-workspace-netrc 从已知存储库计算。 要创建的示意图工作空间的 netrc 配置的值。 有关更多信息,请参阅 支持从专用远程主机下载模块
schematics-workspace-terraform-version 缺省为使用 ibmcloud schematics version --output JSON 检索的示意图 Terraform 版本 用于要创建的示意图工作空间的 Terraform 版本。 请参阅 Schematics 图像和打包的 Terraform 提供程序概述

要在 IaC CD 部署过程中配置脚本,请定义为给定库存条目限定作用域的参数。 要为给定作用域 (库存条目) 指定 Schematics as deployment tool 相关环境属性,请为该属性添加库存条目名称前缀,例如: <inventory_entry>_。 此前缀适用于所有与示意图相关的环境条目 ( schematics-ibmcloud-api-key 除外)。

示例:

hello-iac-sample_schematics-workspace-name : workspace-for-deployment-of-hello-iac-sample

使用 Terraform CLI 作为部署工具的配置

表 9。 配置以使用 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 部署过程中配置脚本,请定义为库存条目限定作用域的参数。 要为作用域 (库存条目) 指定 Terraform CLI as deployment tool 相关环境属性,请为该属性添加库存条目名称前缀,例如: <inventory_entry>_。 此前缀适用于所有与示意图相关的环境条目。

示例:

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

发布到库存

使用“发布到库存”用户脚本阶段,通过 cocoa inventory add CLI 命令将工件添加到库存。 有关 cocoa inventory add 的更多信息,请参阅 可可库存添加

您可以使用 pipelinectl 界面通过 list_reposload_repolist_artifactsload_artifact 命令来访问存储库和工件。 有关更多信息,请参阅 pipelinectl

在构建时收集合规性数据

当管道成功运行时,您可以收集有关构建的信息。

将在所有检查,扫描,测试和工件登录时收集证据,并将其放入证据锁定程序中。 管道日志文件还将与管道数据本身 (包含 Tekton 定义) 一起保存到锁定程序。 在此步骤中还会收集有关同级复审的合规性数据。 管道使用 pipelinectl 来搜索具有自上次构建以来合并的拉取请求的存储库。 管道还会检查 PR 复审状态,将其保存为工件,并根据结果创建证据。

最终脚本是评估程序,根据证据状态将管道状态标记为绿色或红色。 如果有任何故障,那么持续集成运行将标记为红色。