IBM Cloud Docs
使用 DevSecOps 设置 Tekton 持续部署管道

使用 DevSecOps 设置 Tekton 持续部署管道

完成以下步骤以设置具有合规性的 Tekton 持续部署管道。 配置选项将指导您完成创建工具链的步骤。

准备工作

CD 工具链的指导式设置概述

查看以下视频教程以获取设置过程的概述:

图 1 中的进度指示器将指导您完成工具链配置。 如果需要返回到上一个步骤,那么可以使用进度指示器来浏览到上一个步骤。

DevSec操作持续部署工具链欢迎页面
图 1。 DevSecOps Continuous Deployment 工具链欢迎页面

当前步骤的配置选项显示在页面的主区域中。

要前进到下一步,请单击 继续。 仅当当前步骤的配置完成且有效时,才能前进到下一步。 您可以通过单击 后退来浏览至上一步。

某些步骤可能具有 切换到高级配置 开关。 这些步骤为您提供了建议的最低配置。 但是,需要细颗粒度控制的高级用户可以单击 切换到高级配置 切换以查看底层集成的所有选项。

DevSecOps 高级配置切换
图 2。 DevSecOps 高级配置切换

成功完成所有步骤后,单击 创建 以创建工具链。

您可以返回到引导式安装程序中的先前步骤。 工具链安装程序将保留您完成的所有配置。

启动 CD 工具链设置

使用下列其中一个选项来启动 CD 工具链配置:

  • 单击 创建工具链

    创建工具链

  • 在 IBM Cloud 控制台中,单击 菜单 “菜单”图标,然后选择 DevOps。 在“工具链”页面上,单击 创建工具链。 在“创建工具链”页面上,单击 CD-Development with DevSecOps 实践

设置工具链名称和区域

DevSecOps CD 工具链名称和区域
图 3。 DevSecOps CD 工具链名称和区域

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

工具链区域可能与集群和注册表区域不同。

设置 CD 工具集成

本部分介绍了 CD 工具链使用的各种工具和服务集成的设置。 此部分可能未遵循 IBM Cloud 安装程序希望您设置这些工具的顺序。

如果使用了 CI 管道工具链模板 来设置 CI 过程,请参阅 CI 工具链并复制该工具链中使用的存储库的名称。

如果要从头开始设置 CI 工具链,请在创建 CI 工具链期间配置这些存储库,然后在此处使用这些存储库。

与应用程序相关的存储库

  • 库存: 在此存储库中跟踪变更管理。 每个成功的 CI 管道运行 CD 管道都会创建一个名为已创建 CR 编号的新分支,并在部署结束后将其合并到主节点。 例如, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-inventory

  • 问题: 有关构建和部署过程中发生的突发事件的问题存储在此处。 例如, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-issues

  • 证据: 将在此处收集属于应用程序的所有原始合规性证据。 例如, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-evidence

  • 工具链: tekton 管道定义 (例如管道,触发器和侦听器) 存储在此存储库中。 例如, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-toolchain

从持续集成工具链捕获存储库的名称后,继续 Guided Setup 以开始持续部署工具链创建。 在设置过程中,对于每个存储库,您可以提供指向为 CI 工具链创建的现有 IBM托管的 Git Repos and Issue Tracking 存储库的 URL,或者选择创建新的存储库。 目前,工具链仅支持创建 Git Repos and Issue Tracking 存储库。 未来发行版支持使用 GitHub,GitHub Enterprise (GHE) 和其他 SCM 提供者创建存储库。

清单

工具链的缺省行为是 使用现有库存 来链接工具链的现有库存存储库。 如前所述,工具链当前仅支持链接到现有 Git Repos and Issue Tracking 存储库。

DevSecOps 库存存储库
图 4。 DevSecOps 库存存储库

问题

工具链的缺省行为是 使用现有问题存储库 来链接工具链的现有问题存储库。 如前所述,工具链当前仅支持链接到现有 Git Repos and Issue Tracking 存储库。

DevSecOps 问题存储库
图 5。 DevSecOps 问题存储库

管道配置

存储库包含用于在 CD 管道 (.pipeline-config.yaml) 中运行管道任务的定制脚本。请参阅包含一些缺省配置和脚本的 hello-compliance-deployment 样本存储库。

缺省情况下,从样本存储库设置 克隆部署配置。 克隆存储库时,可以定制用于管道运行的配置和脚本。

  • 新存储库名称: 由工具链创建为部署配置库的 IBM托管的 Git Repos and Issue Tracking 存储库的名称。 存储库的区域与工具链的区域保持不变。 为新存储库选择唯一名称。

如果您具有来自现有持续部署工具链的部署配置存储库,请选择 切换到高级配置 以配置此管道的相同设置。

DevSecOps 管道配置
图 6。 DevSecOps 管道配置

密钥

此工具链中的多个工具需要私钥才能访问特权资源。 IBM Cloud API 密钥是此类私钥的示例。 所有私钥都必须安全地存储在私钥保险库中,然后根据工具链的要求进行引用。

通过 IBM Cloud,您可以从各种私钥管理和数据保护产品中进行选择,以帮助您保护敏感数据并集中您的私钥。 “私钥”步骤指定将哪些私钥保险库集成添加到工具链。 使用提供的开关来添加或除去所需的保险库集成,如 管理 IBM Cloud 密钥 中所述。 本文档为您提供有关先决条件以及如何使用规定的私钥名称列表 (这些私钥名称通常称为提示) 的信息。 通过在模板中使用提示,可以使用预先配置的私钥自动填充工具链,而无需从附加到工具链的各种保险库集成中手动选择这些私钥。

本文档使用 IBM Secrets Manager 作为私钥的保险库文件。

DevSecOps 私钥选项
图 7。 DevSecOps 私钥选项

IBM Key Protect

使用 Key Protect 可安全地存储和应用属于工具链的密钥,例如 API 密钥,映像签名或 HashiCorp 保险库文件凭证。 必须先创建 Key Protect 服务实例,然后再继续。 如果已创建 Key Protect 服务实例,那么可以在此步骤中链接相同的服务实例。

Key Protect
图 8。 Key Protect

  • 名称: 由工具链创建的 Key Protect 实例的名称。 在工具链设置的各个阶段,此名称可访问此密钥保护实例。
  • 区域: Key Protect 服务所在的区域。
  • 资源组: Key Protect 服务所属的资源组。
  • 服务名称: Key Protect 服务名称。

为了符合使用 HashiCorp 保险库文件的最佳实践,此模板包含 Key Protect 工具集成,用于安全地管理 HashiCorp 保险库文件 Role IDSecret ID。 通过将这些 HashiCorp 保险库文件私钥存储在 Key Protect 中作为用户创建工具链的先决条件,您可以保护对 HashiCorp 保险库文件 (这是大多数使用者的缺省私钥存储库) 的访问。

IBM Cloud Secrets Manager

使用 Secrets Manager 可安全地存储和应用属于工具链的私钥,例如 API 密钥,映像签名或 HashiCorp 保险库文件凭证。 必须先创建 Secrets Manager 服务实例,然后再继续操作。 如果已创建 Secrets Manager 服务实例作为先决条件,那么可以在此步骤中链接相同的实例。

DevSecOps 私钥管理器
图 9。 DevSecOps 私钥管理器

  • 名称: 由工具链创建的 Secrets Manager 实例的名称。 在工具链设置的各个阶段中,此名称可访问此 Secrets Manager 实例。
  • 区域: Secrets Manager 服务所在的区域。
  • 资源组: Secrets Manager 服务所属的资源组。
  • 服务名称: Secrets Manager 服务名称。

HashiCorp 保险库文件

使用 HashiCorp 保险库文件可安全地存储工具链所需的私钥。 私钥的示例包括 API 密钥,密码或允许访问敏感信息的任何其他令牌。 工具链存储对 HashiCorp 保险库文件私钥 (而不是字面值私钥值) 的引用,这些私钥支持高级功能 (例如私钥轮换)。

HashiCorp 保险库文件
图 10. HashiCorp 保险库文件

  • 名称: 此工具集成的名称。 此名称显示在工具链中。
  • 服务器 URL: HashiCorp 保险库文件实例的服务器 URL。 (例如,https://192.168.0.100:8200)
  • 集成 URL: 单击 HashiCorp 保险库文件集成磁贴时要浏览到的 URL。
  • 私钥路径: 私钥存储在 HashiCorp 保险库文件实例中的安装路径。
  • 认证方法: HashiCorp 保险库文件实例的认证方法。
  • 角色标识: 团队的 AppRole 角色标识
  • 私钥标识: 团队的 私钥标识

您可以使用 AppRole 认证方法来读取私钥值。

证据存储

将在此存储库中收集属于应用程序的所有原始合规性证据。 此存储库选项仅用于评估目的。

工具链的缺省行为是 使用现有证据锁定程序。 可以将 存储库 URL 字段设置为已创建/用于 CI 工具链的证据存储库 URL。 如果要为工具链创建证据锁定程序,请选择 创建新的证据锁定程序存储库,这将创建新的存储库作为 IBM托管的 Git Repos and Issue Tracking 存储库。

但是,您应该收集所有证据并将其存储在可按 Cloud Object Storage 存储区 中所述配置的 Cloud Object Storage 存储区中。

DevSecOps Evidence Storage
图 11. DevSecOps Evidence Storage

证据

云对象存储区

Cloud Object Storage 存储区切换
图 12. COS 存储区切换

Cloud Object Storage 用于存储由合规性管道生成的证据和工件。 如果要使用此功能,那么必须具有 Cloud Object Storage 实例和存储区。 有关更多信息,请遵循 此处 的步骤。

您可以将任何类型的 Cloud Object Storage 存储区设置为锁定程序,即使没有保留策略也是如此。 管道当前不会检查或强制实施设置。

有关帮助,请参阅 Cloud Object Storage 文档

您需要为管道提供以下信息才能到达存储区:

  • Cloud Object Storage 端点
  • 存储区名称
  • 服务 API 密钥

稍后可以通过提供必需的 cos-bucket-namecos-endpoint 来设置 Cloud Object Storage 锁定程序。

要获取 Cloud Object Storage 端点,请转至 Cloud Object Storage 实例的页面,然后在菜单中选择 端点 部分。 复制与存储区的 区域弹性匹配的公用端点,专用端点或直接端点。

DevSecOps Cloud Object Storage 端点菜单
图 13. DevSecOps Cloud Object Storage 端点菜单

如果您决定不使用 Cloud Object Storage 作为证据锁定程序,那么还可以在创建工具链后通过在 CI 管道中设置 cos-bucket-name cos-endpoint 环境变量来设置必需值。

管道存储库包含 CI 和 CD 工具链的配置,因此可以在两个工具链之间保持公共。 如果要将单独的管道定义用于 CD 工具链 Tekton 定义,请使用 切换到高级配置 开关来克隆存储库。

DevSecOps Tekton Pipeline
图 14. DevSec操作 Tekton 管道

部署

配置在其中部署应用程序的目标 Kubernetes 集群。 选择要用作生产或阶段环境的目标 Kubernetes 集群。 工具链将构建应用程序映像部署到集群,并运行验收测试和其他合规性检查。

IBM Cloud API 密钥

API 密钥用于在多个任务中与 ibmcloud CLI 工具进行交互。 如果创建了集群,那么 API 用于访问集群并将密钥存储在安全保险库文件 ( Key Protect,Secrets Manager或 HashiCorp 保险库文件中的任何一个) 中,作为先决条件,您可以在此步骤中使用相同的密钥。

- Option-1: An existing key can be imported from an existing Secret Provider intance created as prerequisites (Key Protect Instance, Secret Manager Instance or HashiCorp Vault) by clicking the key icon (Recommended)
- Option-2: An existing key can be copy & pasted (Not Recommended)
- Option-3: A new key can be created from here by clicking **New +**. Generate a new api-key if you don’t have one or copy an existing key to the field.The newly generated API key can be immediately saved to an existing Key Protect instance

单击 密钥 图标以使用私钥提供程序中的现有密钥。

  • 提供者: 存储 API 密钥以访问集群的私钥提供者,如先前链接到工具链的那样。 它可以是 Key Protect 实例,Secret Manager 实例或 HashiCorp 保险库文件实例。
  • 资源组: Secrets Manager 提供者所属的资源组。
  • 私钥名称: 私钥的名称或别名,即 API 密钥。

填充“API 密钥”字段时,将自动填充与注册表和集群相关的字段。

DevSecOps Tekton Pipeline
图 15. DevSec操作 Tekton 管道

库存目标和源分支

  • 库存源环境: 要从中提升应用程序的环境。 缺省值: master

  • 库存目标环境: 要将应用程序部署到的环境。 缺省值: prod

  • 目标区域: 应用程序部署到的目标区域 (可选)

  • 变更请求 PR 和问题的紧急标签: 要用于紧急部署的变更请求上的标签

变更请求管理

您可以选择 IBM Cloud 托管的 Git Repos and Issue Tracking 存储库来管理变更请求。

变更请求
图 16. 更改请求

Git Repos and Issue Tracking

  • 新存储库名称: 要用于变更请求管理的 Git Repos and Issue Tracking 存储库的名称。

工具链的缺省行为是 使用缺省 Git Repos and Issue Tracking 变更请求管理存储库,该存储库将新的变更请求管理存储库创建为 IBM托管的 Git Repos and Issue Tracking 存储库。 为新存储库选择唯一名称。

如果您具有来自现有 CD 工具链的现有变更请求存储库,请使用 切换到高级配置 切换控件来为此管道配置相同的变更请求存储库。

变更请求管理
图 17. 变更请求管理

指向现有 DevOps Insights 工具链的链接

在创建 CI 工具链期间,我们已创建 DevOps Insights 的实例。 同样需要在 CD 工具链中提及。 将每个合规性检查证据发布到其中后,工具链会将部署记录发布到 DevOps 洞察。 您可以从 CI 工具链链接 DevOps Insights 集成,方法是提供集成标识以将所有部署数据整合到单个 DevOps Insight 实例中。

您可以从工具链的 URL 复制工具链标识。 工具链的 URL 遵循以下模式: https://cloud.ibm.com/devops/toolchains/<toolchain-ID-comes-here>?env_id=ibm:yp:us-south

例如,如果 URL 为 https://cloud.ibm.com/devops/toolchains/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee?env_id=ibm:yp:us-south,那么工具链的标识为 aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

请确保仅在此处包含标识,而不包含完整 URL。

您还可以为 DOI 交互设置目标环境。 此参数是可选参数。 如果提供此参数,那么将使用此参数来代替库存中的目标环境。

DevSecOps DevOps Insights 工具链
图 18. DevSecOps DevOps Insights 工具链

可选工具

Slack

如果要接收有关 CD 管道事件的通知,可以在设置期间从工具链模板配置 Slack 工具,也可以稍后添加 Slack 工具。

为了使 Slack 通道接收来自工具的通知,您需要 Slack Webhook URL。 要获取 Webhook URL,请参阅 Slack API Web 站点 的“传入 Webhook”部分。

DevSecOps Slack
图 19. DevSecOps Slack

创建工具链后,可以使用 CD 管道中的 slack-notifications 环境属性 (0 = off,1 = on) 来切换发送通知:

DevSecOps Slack 切换
图 20. DevSec操作 Slack 切换

公共 DevOps Insights 工具链

可以选择将 DevOps Insights 包含在创建的工具链中,并在将每个合规性检查证据发布到其中之后。 工具链可以使用现有 DevOps Insights 实例将部署记录发布到洞察。 您可以从 CI 工具链链接 DevOps Insights 集成,方法是提供集成标识以将所有部署数据整合到单个 DevOps Insight 实例中。

DOI 工具链标识
图 21. DOI 工具链标识

您可以从工具链的 URL 复制工具链标识。 工具链的 URL 遵循以下模式: https://cloud.ibm.com/devops/toolchains/<toolchain-ID>?env_id=ibm:yp:us-south

例如,如果 URL 为: https://cloud.ibm.com/devops/toolchains/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee?env_id=ibm:yp:us-south,那么工具链的标识为: aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

请确保仅包含标识,而不包含完整的 URL。

您还可以为 DOI 交互设置可选目标环境。 如果提供此参数,那么将使用此参数来代替库存中的目标环境。

DevOps Insights

如果要创建要用于工具链的 DevOps Insights 的新实例,请使用此选项。 不需要配置,如果选择此选项,那么工具链将创建 DevOps Insight 的新实例。 CD 管道会自动使用工具链中包含的洞察实例。

安全性和合规性

要将工具链与 Security and Compliance Service 集成,您需要为 Security and Compliance 数据收集器提供名称和证据锁定程序存储库名称。

DevSecOps Security and Compliance
图 22. DevSecOps 安全性与合规性

阅读有关 Security and Compliance Center工具集成 配置过程的更多信息。

私人工人

专用工作程序
图 24. 专用工作程序

Delivery Pipeline 专用工作程序工具集成与一个或多个可单独运行 Delivery Pipeline 工作负载的专用工作程序连接。 有关更多信息,请参阅 使用专用工作程序

创建 CD 工具链

单击 创建,然后等待创建工具链。

DevSecOps 摘要页面
图 25. DevSec操作摘要页面

DevSecOps CD Toolchain Created
图 26. DevSecOps CD 工具链已创建

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

浏览 CD 工具链

运行 Promotion Pipeline

  • 在运行提升管道之前,请确保 CI 管道已成功运行。
  • 促销管道将在库存源环境 (例如: 主) 分支上创建具有库存内容的拉取请求,目标是库存目标环境分支 (例如: 登台或生产)。 将创建 PR 的中间分支,在合并 PR 后可以将其废弃。

DevSec操作提升管道
图 27 DevSec操作提升管道

Promotion Pipeline 成功完成后,promote 任务将提供指向“库存存储库”中的 Pull Request 的链接。 拉取请求名称的格式为 promote <Inventory Source Environment> to <Inventory Target Environment>

  1. 使用日志中提供的链接在浏览器中打开 Pull Request。 完成以下部分中的详细信息:
    • 优先级: (必需)“紧急”,“高”,“中等”,“低”和“计划”中的一个
    • 变更请求受让人: (必需) 受让人的电子邮件标识
    • 其他描述: 有关应用程序中的更改的描述
    • 用途: 对应用程序进行的更改的用途
    • Impact 说明: 更改对应用程序行为或环境的影响
    • 回退计划: 部署失败时回退的步骤
  2. 填写 Pull Requestsave 中的字段。
  3. 如果 CI 中的任何合规性检查失败,并且您希望继续部署,请将 EMERGENCY 标签添加到 PR
  4. 从 Git Repos and Issue Tracking合并 Pull Request

在 CD 管道运行期间,CD 管道使用 Pull Request 的详细信息在变更请求管理存储库中创建变更请求。

运行 CD 管道

运行促销管道

  1. 在运行 Promotion Pipeline 之前,请确保 CI 管道已成功运行。
  2. 促销管道使用库存源环境 (例如: master) 分支上的库存内容创建 Pull Request,以库存目标环境分支为目标 (例如: stagingprod)。 将创建 PR 的中间分支,在合并 PR 后可以将其废弃。

运行促销管道
图 28. 运行提升管道

  1. Promotion Pipeline 成功完成后,promote 任务将为您提供指向“库存存储库”中先前提到的 Pull Request 的链接。 拉取请求名称的格式如下:
promote <Inventory Source Environment> to <Inventory Target Environment>
  1. 使用日志中提供的链接在浏览器中打开 Pull Request。 请按如下所示完成这些部分:

    • 优先级: (必需)“紧急”,“高”,“中等”,“低”和“计划”中的一个
    • 变更请求受让人: (必需) 受让人的电子邮件标识
    • 其他描述: 有关应用程序中的更改的描述
    • 用途: 对应用程序进行的更改的用途
    • Impact 说明: 更改对应用程序行为或环境的影响
    • 回退计划: 部署失败时回退的步骤
  2. 填写 Pull Request 中的字段并保存。

  3. 从 Git Repos and Issue Tracking合并 Pull Request

CD 管道使用 Pull Request 的详细信息在 CD 管道运行期间在变更请求管理存储库中创建变更请求。

运行 CD 管道

您可以通过以下任一方式启动 CD 管道:

  • 手动触发 CD 管道。
  • 在“库存存储库”中执行每个 Merge 操作后自动执行。 合并后,必须手动触发 CD 管道的运行。 Git Repos and Issue Tracking 触发器设置为触发自动 CD 管道,但缺省情况下处于禁用状态,并且可以在第一次提升后启用。

DevSec操作 CD 管道手动提升
图 29. DevSec操作 CD 管道手动提升

DevSec操作 CD 管道自动提升
图 30. DevSec操作 CD 管道自动提升

您还可以随时手动触发 CD Pipeline,但如果自上次成功部署以来没有任何更改,那么 CD pipeline 不会部署任何新的内容。

成功的 CD 管道运行如下所示:

DevSec操作 CD 管道成功
图 31. DevSec操作 CD 管道成功

CD 管道中任务的流程:

DevSecOps CD 任务
图 32. DevSecOps CD 任务

成功运行 CD 管道后,您可以找到正在生产名称空间上运行的样本应用程序。 可以在 CD 管道运行的 run stage 子步骤 prod deployment 步骤下找到应用程序 URL。 使用该 URL 来检查应用程序是否正在运行。

DevSecOps App running
图 33. DevSec正在运行的 Ops 应用程序