基础架构即代码的持续集成管道
“基础结构即代码”的持续集成管道 (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
文件定制阶段的更多信息,请参阅 定制脚本。 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 部署过程中使用的脚本。 因为 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 连续集成管道定义了更多工具,这些工具通过使用设置为 1
的表 2 中的 opt-in-*
参数来启用。
名称 | 类型 | 缺省值 | 描述 | 必需或可选 |
---|---|---|---|---|
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 |
指示要安装的 tflint 版本 (如果未在用于 static-scan 阶段执行的映像中提供)。 |
可选 |
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 设置为 1 |
checkov |
使用 Checkov 工具可查找错误配置并创建合规性问题。 | opt-in-checkov 设置为 1 |
属性 | 缺省 | 描述 |
---|---|---|
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 中的特定参数来配置缺省构建功能。
属性 | 缺省 | 描述 |
---|---|---|
configuration-name |
Git 存储库名称的“人性化”部分。 | 名称IaC配置。 用于 IaC CI 管道构建的工件文件名和库存条目。 |
build-ignore-file |
忽略列表文件的路径 (用于 tar --exclude-from ) |
有关如何访问定制脚本阶段中的参数和私钥的更多信息,请参阅 定制脚本。
工件符号
Sign 工件阶段提供了使用 GPG 密钥为一个或多个工件创建拆离签名文件的缺省行为。
属性 | 描述 |
---|---|
signing-key |
用于一个或多个工件的已拆离特征符的 ascii 版本的 GPG 专用密钥值 |
要使用其他签名过程,请使用项目中的 .pipeline-config.yaml
配置来定制此阶段。
部署到开发
部署阶段将配置工件部署到开发环境中。 您可以从 管道 UI 中的变量 和 管道触发器 Webhook 有效内容 提供此阶段的变量和凭证。
作为公共基本映像的一部分提供的脚本可帮助使用示意图或 Terraform CLI 执行部署。 用于配置部署操作的脚本的参数在表 8 和表 9 中进行了描述。
用于将 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 作为部署工具的配置
属性 | 描述 |
---|---|
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_repos
,load_repo
,list_artifacts
和 load_artifact
命令来访问存储库和工件。 有关更多信息,请参阅 pipelinectl。
在构建时收集合规性数据
当管道成功运行时,您可以收集有关构建的信息。
将在所有检查,扫描,测试和工件登录时收集证据,并将其放入证据锁定程序中。 管道日志文件还将与管道数据本身 (包含 Tekton 定义) 一起保存到锁定程序。 在此步骤中还会收集有关同级复审的合规性数据。 管道使用 pipelinectl
来搜索具有自上次构建以来合并的拉取请求的存储库。 管道还会检查 PR 复审状态,将其保存为工件,并根据结果创建证据。
最终脚本是评估程序,根据证据状态将管道状态标记为绿色或红色。 如果有任何故障,那么持续集成运行将标记为红色。