IBM Cloud Docs
使用 DevSecOps 设置持续集成管道

使用 DevSecOps 设置持续集成管道

通过本教程,您可以设置 Tekton 持续集成 (CI) 管道,并创建符合要求的工具链。

准备工作

启动 CI 工具链设置

Continuous Delivery服务提供的模板可引导您完成工具链设置,并按逻辑顺序创建流程。 进度指示器显示完成配置的步骤。 按照以下步骤访问 CI 工具链模板。

  1. 访问 IBM Cloud 控制台
  2. 单击 Menu Menu 图标,然后选择 DevOps
  3. 在工具链页面,单击 创建工具链
  4. 选中 基础设施即代码
  5. 单击 CI - 使用 DevSecOps 实践开发安全的基础架构即代码 瓷砖。

设置 CI 工具链设置

欢迎页面概述了工具链的目的,以及指向文档和相关材料的指针。

  1. 单击启动

  2. 在 IBM Cloud 中为同一区域和资源组输入工具链中的 工具链名称

  3. 从下拉列表中选择一个地区

  4. 从下拉列表中选择一个资源组

  5. 单击继续

    只有当当前步骤的配置完成且有效时,才能进入下一步。 您可以随时单击 Back 查看引导安装程序中的前几步。 工具链安装程序会保留后续步骤中的所有配置设置。

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

设置 CI 工具集成

查看默认设置,并在必要时提供用户自定义配置,以设置 CI 工具集成。 在设置过程中配置多个存储库。 您可以克隆示例仓库,也可以使用自己的仓库,但工具链只支持链接到现有的 Git Repos and Issue Tracking 仓库。

应用程序

复查工具链设置的缺省信息:

  1. 您可以接受模板中提供的默认配置。
  2. 单击 继续

清单

清单存储库记录了由 CI 工具链构建的工件的详细信息。

  1. 您可以接受模板中提供的默认配置。
  2. 单击继续

问题

问题库记录 CI 管道运行时发现的问题。

  1. 您可以接受模板中提供的默认配置。
  2. 单击 继续

密钥

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

  1. 本教程使用 IBM Cloud® Secrets Manager 作为秘密库。 地区资源组服务名称字段将根据可用选择自动填充。 单击下拉指示器查看其他选择。
  2. 键入 Secrets Manager 实例名称
  3. 从下拉列表中选择 授权类型
  4. 单击继续

证据存储

证据库存储 DevSecOps CI 管道生成的所有证据和工件。

  1. 切换 IBM Cloud Object Storage 邮筒滑块,将所有证据存储到 IBM Cloud Object Storage 邮筒中,可在下一页进行配置。
  2. 接受默认设置。
  3. 单击继续

云 Object Storage 桶

您必须拥有 IBM Cloud Object Storage 实例 和一个 水桶 作为合规证据保管箱。

  1. Cloud Object Storage 实例Bucket 名称Cloud Object Storage 端点字段将自动填充。
  2. 输入您的 Service ID API 密钥
    • 首选:点击密钥图标,即可从保密库导入现有密钥。
    • 可复制和粘贴现有密钥。
  3. 单击继续

端点字段为可选项。 建议在工具链设置期间或管道运行期间选择或提供端点。

部署

配置清单目标和部署应用程序的 Kubernetes 集群:

  1. 默认 应用程序名称hello-compliance-app

  2. 键入您的 IBM Cloud API 密钥。 API 密钥用于在多项任务中与 IBM Cloud CLI 工具交互。

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

    新生成的 API 密钥可立即保存到保密库中。

  3. 如果 API 密钥有效且有足够的访问权限,Container Registry, Container Registry 命名空间开发集群区域资源组集群名称集群命名空间已自动填充。 您可以更改其中任何字段,以符合您的配置。

  4. 单击继续

神器签名

工件由工具链构建并记录在清单中,在部署到生产中之前必须签名。 管道使用 Skopeo 作为默认工具来提供工件签名功能。 您可以使用现有的 GPG 密钥或创建新的 GPG 密钥对

  1. 输入 GnuPG 专用密钥。 或者,您也可以单击 NEW 创建一个新的 GPG 密钥。 有关详细信息,请参阅 生成 GPG 密钥
  2. 单击继续

DevOps Insights

IBM Cloud DevOps Insights 包含在工具链中。 从每个部署和环境中查看每次构建的管道测试结果。

  1. 接受默认配置。
  2. 单击继续

可选工具

Slack

配置 Slack 以接收有关拉取请求或 CI 管道事件的通知。 您也可以在创建工具链后添加 Slack 工具。

  1. 输入您的 Slack 网络钩子。 有关更多信息,请参阅 Slack webhook
  2. 输入您的黑客频道来发布消息。
  3. 输入空白队名。 例如,如果您的团队网址是 https://team.slack.com,那么团队名称就是 team
  4. 选择要为 Automated Slack Notifications 接收通知的事件。
  5. 单击继续

通用 DevOps Insights 工具链

DevOps Insights可选择性地包含在创建的工具链中,并在每次合规性检查证据发布后加入。 工具链可以使用现有的 DevOps Insights 实例向 insights 发布部署记录。 您可以通过提供集成 ID 从其他工具链链接 DevOps Insights 集成。

  1. 接受 当前工具链
  2. 单击继续

您可以从工具链的 URL 复制工具链 ID。 工具链的 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 则工具链的 ID 为:aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee. 只包含 ID,不包含完整的 URL。

您还可以为 DevOps Insights 交互设置目标环境。 该参数为可选参数,用于替代清单中的目标环境。

DevOps Insights

您可以创建用于工具链的 DevOps Insights 实例。 如果不需要配置,CI 管道会自动使用工具链中包含的 insights 实例。

输送管道私人工人

由工具链构建并记录在清单中的工件必须使用 GaraSign,由 Garantir 提供的代码签名服务)进行签名,然后才能将镜像部署到生产环境中。 要启用 GaraSign 神器签名,您必须拥有 TaaS 私有 Worker 和 IBM CISO 签名证书。 有关详细信息,请参阅 在一个管道 CI 管道中使用 GaraSign

Delivery Pipeline私有 Worker 工具集成与一个或多个私有 Worker 相连,这些私有 Worker 可以隔离运行交付管道工作负载。

SonarQube

配置 SonarQube 为工具链的静态代码分析工具。 SonarQube 提供了源代码总体运行状况和质量的概述,并重点阐述了在新代码中发现的问题。 静态代码分析器可检测多种编程语言的棘手错误,如空指针取消引用、逻辑错误和资源泄漏。

  1. 接受 默认配置
  2. 单击继续

创建 CI 工具链

  1. 在摘要页面,单击 创建
  2. 等待工具链创建。 这可能需要几分钟时间。

探索 CI 工具链

如屏幕截图所示,CD 工具链已创建,并包含两个管道。 单击 ci-pipeline 磁贴打开并运行推广管道。

DevSecOps 持续集成工具链
图 1。 DevSecOps 持续集成工具链

运行 PR-CI 管道

要启动 ci-pr pipeline,您需要在应用程序存储库中创建一个合并请求。

  1. 从 CI 工具链页面,单击 pr pipeline 磁贴。 默认情况下,创建的名称为 compliance-app-<timestamp>

  2. 从主分支创建分支

  3. 更新应用程序中的代码或添加自述文件,并保存更改。

  4. 提交 合并请求

  5. 在 CI 工具链页面,单击 pr-pipeline 磁贴。 验证合并请求的创建是否触发了 ci-pr pipeline

  6. 等待 ci-pr pipeline 运行完成。 应用程序版本库中的相应合并请求处于 Pending 状态,直到 PR 管道的所有阶段都成功完成。

  7. PR 管道运行成功后,单击管道可查看已完成的众多步骤并查看页面。 要编辑并重新提交合并请求,请按照第 3 步至第 7 步操作。

    DevSecOps PR 管道成功
    图 2。 DevSecOps 公关管道成功

简化管道中的任务流程

在DevSecOps PR 任务流水线流程中,省略了实用程序任务。 例如,GitHub, 凭据获取等。 在 DevSecOps 世界中,左移是一种预防和发现缺陷、安全漏洞等问题的做法。 如图所示,左移还可以在软件交付流程的早期执行合规性检查。

DevSecOps PR 任务
图 3。 DevSecOps 公关任务

  • 可在代码/资源库上运行的检查,不需要构建。 应尽早运行该工件,以防止不合规的代码被合并到版本库的主分支。 没有从公关渠道收集证据。 管道的目标是将合规检查尽可能向左移。
  • 所有检查都在管道运行时进行。 即使前一个检查失败,流水线也会继续进行下一个检查。 要评估运行中是否有任何故障,需要检查管道的最后一步,这一步有一个管道评估器。
  • 如果您正在尝试合并紧急修复,并希望绕过合规性检查。 在合并请求中添加一个标签,标明修复内容。 运行光盘管道时必须提供相同的标签。

运行公关管道

您可以通过以下方式之一启动 CI 管道:

  • 自动:在 PR 管道成功后,批准 PR 并将其合并到主分支。
  • 手动:要手动触发 CI 管道,请选择交付管道卡,单击 运行管道,然后选择 手动触发

在本教程中,CI 管道是在您将代码更改合并到应用程序版本库的主分支后触发的。

  1. CI 工具链页面上,单击 cii-pipeline 磁贴。
  2. 针对管道名称单击 Run。 观察管道运行情况。 等待管道运行完成。
  3. CI 管道运行成功后,单击管道探索已完成的步骤,查看页面,如屏幕截图所示。

运行 CI 管道

在本文中,CI 管道是在您将代码更改合并到应用程序版本库的主分支后触发的。

  1. 在 CI 工具链页面上,单击 cii-pipeline 磁贴。
  2. 观察:管道运行正在运行。 等待管道运行完成。

CI 管道运行成功后,您可以单击管道任务查看已完成的步骤。

DevSecOps CI 管道成功
图 4。 DevSecOps CI 管道成功

简化管道中的任务流程

在 DevSecOps CI 管道任务流程中,实用程序任务被省略。 例如,GitHub, 凭据获取等。 绿色任务正在输出证据。

DevSecOps CI 任务
5. 图 DevSecOps CI 任务

从 CI 管道中的所有合规性检查中收集证据,并将其存储到工具链设置时提供的证据锁定库中。 来自 CI 的证据存储在 raw/ci/<pipeline-run-id>/*.json 下。

证据将发布到工具链中的 DevOps Insights 实例。 您可以点击工具链中的 DevOps Insights 工具卡进行导航。 您可以在“质量控制面板”页面查看收集到的证据。

DevSecOps CI 证据
图 6。 DevSecOps CI 证据

要评估管道运行中是否有任何故障,必须检查管道的最后一步,这一步有一个管道评估器。

查看运行中的应用程序

成功运行 CI 管道后,示例应用程序将部署到 Kubernetes 集群上,并在 dev 命名空间中运行。

在 CI 管道运行的 run stage 步骤 deploy-dev 任务的日志末尾,可以找到应用程序 URL。 使用该 URL 验证应用程序是否正在运行。

DevSecOps CI 示例应用程序
图 7。 DevSecOps CI 示例应用程序

配置管道

添加 commit-id 文本属性。

  1. 单击添加属性
  2. 选择文本属性

如果手动触发管道而不使用 commit-id,管道会从应用程序的主分支获取最新的提交 ID。

示例

图 7. commit-id

添加触发器参数。

  1. 单击 运行管道
  2. 选择 手动触发器
  3. 单击运行