IBM Cloud Docs
为“基础设施即代码”建立 CD 工具链

为“基础设施即代码”建立 CD 工具链

本教程是三部分教程系列的第三部分,您将通过使用基于 IBM Cloud® Continuous Delivery 的服务提供的完整参考实现,学习 IBM Cloud® ( DevSecOps )的最佳实践。 在本教程系列的第3部分中,您将使用工具链模板在 DevSecOps 中实现持续部署(CD),并遵循与安全及合规性相关的最佳实践。

准备工作

在开始本教程系列的第 3 部分之前,请确保完成以下前提条件:

  1. 完成 第 1 部分:设置前提条件
  2. 完成 第 2 部分:为 "基础设施即代码"(Terraform)设置 CI 工具链
  3. 观看 IBM Cloud 中的 DevSecOps 入门 - 第 2 部分视频。

CD - 使用 DevSecOps 实践部署安全应用程序

DevSecOps CD 工具链只包含一个用于持续部署的管道。 它实施了以下最佳做法:

  • 变更管理自动化可帮助开发人员、审批人员和审计人员从合规性角度跟踪部署情况。
  • 根据在 CI 管道中收集的证据创建证据摘要。
  • 在基于 Git Repos and Issue Tracking 的变更管理库中创建变更请求,并为其添加部署证据。
  • 使用清单资源库将构建的工件推广到暂存和生产等部署环境。
  • 检查 CR,如果所有检查都通过,则自动批准。
  • 如果 CR 获得批准,或者出现紧急情况,工具链就会将映像从库存部署到生产中。

光盘工具链引导设置概述

本教程中的任何方法都会带您进入引导设置体验。 系统会引导您完成工具链设置过程,并向您提供创建工具链所需的推荐配置选项。

进度指示器显示完成配置的步骤。 您可以使用进度指示器导航到上一步。 当前步骤的配置选项显示在页面的主区域。

DevSecOps 持续部署工具链欢迎页面
图 1. DevSecOps 持续部署工具链欢迎页面

要进入下一步,请单击“继续”。 仅当当前步骤的配置完成且有效时,才能前进到下一步。 单击“返回”可跳转到上一步。

某些步骤包括切换到高级配置切换。 默认情况下,这些步骤将为您提供所需的最低配置。 不过,需要更精细控制的高级用户可以点击切换到高级配置切换键,显示底层集成的所有选项。

DevSecOps 高级配置切换器
图 2. DevSecOps 高级配置切换

成功完成所有步骤后,点击“摘要”步骤中的“**创建 **”即可创建工具链。

您可以随时返回到引导安装程序中的先前步骤。 工具链安装程序将保留后续步骤中的所有配置设置。

启动 CD 工具链设置

使用以下选项之一启动 CD 工具链配置:

  • 单击创建工具链

    创建工具链

  • 从 IBM Cloud 控制台单击菜单 图标 并选择 DevOps. 在工具链页面,单击创建工具链。 在“创建工具链”页面,单击 " CD-Develop with DevSecOps practices "。

设置 CD 工具链名称和区域

复查工具链设置的缺省信息。 工具链的名称在 IBM Cloud 中起到标识符的作用。 确保在 IBM Cloud 中,同一区域和资源组的工具链名称是唯一的。

在下拉菜单中选择相关的 CI 工具链,复制部分 CI 配置,以帮助设置此 CD 工具链。

DevSecOps 相关的 CI 工具链
图 3. DevSecOps 相关的 CI 工具链

警告:此操作可能会覆盖某些已输入的值。

设置 CD 工具集成

如果已在欢迎步骤中链接到现有的 CI 工具链,则会预填该工具链中使用的应用程序相关软件仓库的名称。 查看存储库 URL,然后继续执行后续步骤。

应用程序相关存储库

如果要从头开始设置 CD 工具链,请在创建 CI 工具链时配置这些软件源,然后在此使用或链接到它们。

要获取相应的 URL,请转到 CI Pipeline,选择相应的工具卡。 右键单击工具卡,选择复制链接地址

  • 库存:库存存储库记录了由 CI 和 CD 管道构建的工件的详细信息。 例如, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-inventory
  • 问题问题库记录 CI 管道运行时发现的问题。 例如,https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-issues
  • 证据:这里收集了属于应用程序的所有原始合规证据。 例如,https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-evidence

该工具链目前仅支持链接至 IBM 托管的 Git Repos and Issue Tracking 仓库。

清单

Repository URL: 上一步捕获的 CI 工具链中配置的清单存储库的 URL。

问题

Repository URL: 上一步捕获的 CI 工具链中配置的问题库的 URL。

管道配置

管道配置存储库包含部署,测试和其他定制任务所需的 YAML 文件和脚本。

在本教程中,管道配置存储库与 DevSecOps CI 中为“基础设施即代码”( IaC )定义的存储库相同。 选择使用现有部署配置存储库,然后选择用于 CI 工具链管道配置的存储库。

有关 Git repos 的更多信息,请参阅 配置您的 Git Repos and Issue Tracking。 有关自定义脚本的更多信息,请参阅 自定义脚本

密钥

本工具链中的一些工具,以及您的自定义脚本中的一些工具,都需要秘密才能访问特权资源。 IBM Cloud API 密钥就是这种秘密的一个例子。 将这些机密安全地存储在 IBM 推荐的机密管理工具中,如 IBM Key Protect for IBM Cloud, IBM Cloud® Secrets ManagerHashiCorp Vault. 秘密管理工具可集成到工具链中,以便在 Tekton 管道中轻松引用秘密。

本教程使用 IBM Cloud® Secrets Manager 作为秘密的保险库。

证据存储

证据柜存储管道运行的所有任务的证据。 这些证据由管道在管道运行过程中收集。

为您的持续集成 (CI) 工具链选择已配置的 Cloud Object Storage (COS) 桶。 确保在持续集成 (CI)、Continuous Delivery (CD) 和持续合规 (CC) 工具链中使用相同的 COS 桶。

最佳做法是使用 Cloud Object Storage 桶作为证据柜,以存储管道运行期间收集的所有证据和工件。

有关证据存储的更多信息,请参阅 证据

证据

存储库 URL:上一步中捕获的 CI 工具链中配置的证据锁存储库的 URL。

云 Object Storage 存储区

要使用此功能,您必须拥有一个云 Object Storage 实例和一个存储桶。 单击“使用 Cloud Object Storage 存储桶作为证据库” 以创建 Cloud Object Storage 实例。 有关配置可作为合规性证据存储库的存储桶的详细信息,请参阅《 配置云 Object Storage 以存储证据 》。

  • 云 Object Storage 实例、Bucket 名称和云 Object Storage 端点字段已自动填充。
  • 输入服务 ID API 密钥
    • 首选:点击密钥图标,即可从保密库导入现有密钥。
    • 现有密钥可以复制和粘贴。

端点字段为可选项。 在工具链设置过程中或管道运行过程中选择或提供端点。

部署目标

对于 DevSecOps for Terraform 用例,请选择自定义部署选项。

自定义目标

该选项需要在管道部署脚本中使用 IBM Cloud API 密钥。 所提供的部署脚本使用 Schematics 将 Terraform 配置工件上传到 Schematics 工作区,并使用 Schematics CLI planapply 命令在 IBM Cloud 上交付 Terraform 配置。

IBM Cloud API 密钥

API 密钥在多项任务中与 IBM Cloud CLI 工具交互:

  • 首选:点击密钥图标,从保密库导入现有密钥。
  • 复制并粘贴现有密钥。
  • 单击新建 + 创建密钥。

将新生成的 API 密钥保存到机密库中。

变更请求管理

使用 IBM Cloud托管的 Git Repos and Issue Tracking 存储库来管理变更请求。 有关更多信息,请参阅 自动化变更管理

DevOps 洞察力工具链

将另一个工具链中现有的 DevOps insights 实例链接到此管道,以便将 CI 和 CD 工具链管道中的所有构建、部署和测试记录收集到同一个地方。

CD 工具链可将部署记录发布到现有的 DevOps insights 实例。 要启用此功能,请在 DevOps insights toolchain ID 下拉菜单中选择包含现有 DevOps Insights 实例的工具链 ID。

可选工具

Slack

配置 Slack 工具,以接收有关 PR/CI 管道事件的通知:

  • Slack 网络钩子
  • 首选:点击密钥图标,即可从保密库导入现有的网络钩子。
  • 复制并粘贴现有的网络钩子。
  • Slack 频道:向现有 Slack 发布信息。
  • Slack 团队名称:. slack.com 前的短语,在我们的团队 URL 中。 例如,如果您的团队 URL 是 https://team.slack.com,团队名称就是 team
  • 自动 Slack 通知:通过选择要接收通知的事件,自定义您的选择。

您可以在创建工具链后添加 Slack 工具。

创建工具链后,在 CD 管道中使用 slack-notifications 环境属性切换发送通知(0 = 关闭,1 = 打开)

创建 CD 工具链

“摘要”页面,单击“创建”,等待工具链创建完成。

在创建管道后配置各个工具链集成。

DevSecOps 创建光盘工具链
图 4. DevSecOps 创建光盘工具链

浏览 CD 工具链

现在 CD 工具链已经创建,点击 cd-pipeline 卡即可打开并运行推广管道。

运行推广管道

在运行推广管道之前,请确保 CI 管道已成功运行。

推广管道会创建一个拉取请求,其中包含清单源环境(例如:master)分支上的清单内容,目标是清单目标环境分支(例如:暂存或 prod)。

  • cd-pipeline 控制面板上,单击运行管道,然后选择手动推广触发器。 单击运行触发管道。
  • 等待推广管道运行完成并检查执行日志。
  • 推广管道成功完成后,promote 任务日志会提供一个指向清单存储库中拉动请求的链接。 拉取请求名称的格式为 promote <Inventory Source Environment> to <Inventory Target Environment>.
  1. 使用日志中提供的链接在浏览器中打开拉取请求。 填写以下部分的详细信息:

    • 优先级:(强制性)关键、高、中、低、规划之一。
    • 更改申请受让人:(必填)受让人的电子邮件标识。
    • 附加说明:说明申请中的变更。
    • 目的:对应用程序进行更改的目的。
    • Impact 说明: 更改对应用程序行为或环境的影响。
    • 回退计划: 发生部署故障时回退的步骤。
  2. 完成拉动请求中的字段并单击保存

  3. 如果 CI 中的任何合规性检查失败,而您又想 继续部署, 请在 PR 中添加 EMERGENCY 标签

  4. 合并来自 Git Repos and Issue Tracking的拉取请求。

在 CD 管道运行期间,CD 管道会使用拉取请求的详细信息在变更请求管理库中创建变更请求。

配置光盘管道

Terraform 变量

在本教程中,指定要在生产环境中创建的密钥保护实例名称。

为此,请在 cd 管道中选择环境属性,然后单击添加

CD 管道配置
图 5. CD 管道配置

添加一个 Text Value 类型的属性,并命名为 TF_VAR_key_protect_instance。 设置一个有意义的值,表示交付到生产环境,如 key-protect-production-202210191453。 该环境属性的值将作为 key_protect_instance terraform 配置变量的值注入。

您还必须为 Terraform 配置 IBM Cloud 提供程序,并按照 配置 IBM Cloud 提供程序插件中的描述,使用适当的 ibmcloud_api_key 与 IBM Cloud 进行身份验证

添加一个 Secure Value 类型的属性,并命名为 TF_VAR_ibmcloud_api_key。 将值设为用于创建 IBM Cloud 资源的 api 密钥。

本教程中使用的示例需要一个 resource_group 来创建 KeyProtect 实例。 resource_group 的默认名称是 Default。 如果这不适合您的账户,请替换 variables.tf 文件中的默认 resource_group 变量,或通过将 TF_VAR_resource_group 环境属性设置为适当的资源组名称来指定 resource_group 变量的使用值。

管道配置分支

在 CD 管道环境属性中,管道配置存储库的分支默认定义为 master。 将本教程的分支更改为 main

为此,请在 cd-pipeline 中选择环境属性,然后单击 edit,将值更改为 main

CD 管道配置分支
图 6. CD 管道配置分支

运行 CD 管道

通过以下方式之一启动光盘管道:

  • 首选:手动触发 CD 管道。
  • 可选:在清单存储库中每次执行 Merge 操作后自动执行。 设置 Git Repos and Issue Tracking 触发器可触发自动 CD 管道,但默认情况下已禁用。

您也可以随时手动触发 CD 管道,但如果上次成功部署后没有任何更改,CD 管道就会提前终止,因为没有任何东西要部署。 您可以添加并使用 force-redeploy 变量 在不进行代码更改的情况下重新运行 CD。

一次成功的光盘管道运行是这样的

DevSecOps CD 管道成功
图 7. DevSecOps CD 管道取得成功

成功运行 CD 管道后,可以在资源列表中找到 KeyProtect 实例服务。

KeyProtect 创建的服务实例
图 8. KeyProtect 创建的服务实例