使用 DevSecOps 设置持续集成管道
通过本教程,您可以设置 Tekton 持续集成 (CI) 管道,并创建符合要求的工具链。
准备工作
-
在 IBM Cloud® Kubernetes Service 上创建 Kubernetes 集群,以部署您的应用程序。
-
在操作系统上安装 IBM Cloud CLI,以便与 IBM Cloud 资源交互。
-
创建工件签名密钥,并使用正确的编码来签署应用程序的 docker 工件。
-
创建工具链机密,以访问不同的集成并确保安全。
-
配置 IBM Cloud® Object Storage 作为合规证据柜,以持久存储管道运行证据。
-
验证分配给相应集成的 IBM Cloud® Identity and Access Management(IAM)权限。
-
设置GaraSign工件签名服务 以签名工件。
-
观看 在 IBM Cloud 中开始使用 DevSecOps 视频。
CI 管道使用 GaraSign 代码签名服务来签署需要注册和登录的构建工件。 GaraSign 使用内部 IBM 网络,TaaS 团队为 Tekton 提供可访问内部 IBM 网络的私人工作者。 使用TaaS Tekton 私人工作者需要注册和入职。
启动 CI 工具链设置
Continuous Delivery服务提供的模板可引导您完成工具链设置,并按逻辑顺序创建流程。 进度指示器显示完成配置的步骤。 按照以下步骤访问 CI 工具链模板。
- 访问 IBM Cloud 控制台。
- 单击 Menu
,然后选择 DevOps。
- 在工具链页面,单击 创建工具链。
- 选中 基础设施即代码。
- 单击 CI - 使用 DevSecOps 实践开发安全的基础架构即代码 瓷砖。
设置 CI 工具链设置
欢迎页面概述了工具链的目的,以及指向文档和相关材料的指针。
-
单击启动。
-
在 IBM Cloud 中为同一区域和资源组输入工具链中的 工具链名称。
-
从下拉列表中选择一个地区。
-
从下拉列表中选择一个资源组。
-
单击继续。
只有当当前步骤的配置完成且有效时,才能进入下一步。 您可以随时单击 Back 查看引导安装程序中的前几步。 工具链安装程序会保留后续步骤中的所有配置设置。
某些步骤包括 切换到高级配置切换按钮。 默认情况下,这些步骤将为您提供最低配置。 不过,需要更精细控制的高级用户可以单击 切换到高级配置切换按钮,显示底层集成的选项。
设置 CI 工具集成
查看默认设置,并在必要时提供用户自定义配置,以设置 CI 工具集成。 在设置过程中配置多个存储库。 您可以克隆示例仓库,也可以使用自己的仓库,但工具链只支持链接到现有的 Git Repos and Issue Tracking 仓库。
应用程序
复查工具链设置的缺省信息:
- 您可以接受模板中提供的默认配置。
- 单击 继续
清单
清单存储库记录了由 CI 工具链构建的工件的详细信息。
- 您可以接受模板中提供的默认配置。
- 单击继续。
问题
问题库记录 CI 管道运行时发现的问题。
- 您可以接受模板中提供的默认配置。
- 单击 继续
密钥
本工具链中的一些工具,以及您的自定义脚本中的一些工具,都需要秘密才能访问特权资源。 IBM Cloud API 密钥就是这种秘密的一个例子。 将这些机密安全地存储在机密管理工具中,例如 IBM Key Protect for IBM Cloud、IBM Cloud® Secrets Manager 或 HashiCorp Vault。 秘密管理工具 可集成到工具链中,以便您在 Tekton 管道中轻松引用秘密。
- 本教程使用 IBM Cloud® Secrets Manager 作为秘密库。 地区、资源组和服务名称字段将根据可用选择自动填充。 单击下拉指示器查看其他选择。
- 键入 Secrets Manager 实例名称。
- 从下拉列表中选择 授权类型。
- 单击继续。
证据存储
证据库存储 DevSecOps CI 管道生成的所有证据和工件。
- 切换 IBM Cloud Object Storage 邮筒滑块,将所有证据存储到 IBM Cloud Object Storage 邮筒中,可在下一页进行配置。
- 接受默认设置。
- 单击继续。
云 Object Storage 桶
您必须拥有 IBM Cloud Object Storage 实例 和一个 水桶 作为合规证据保管箱。
- Cloud Object Storage 实例、Bucket 名称和 Cloud Object Storage 端点字段将自动填充。
- 输入您的 Service ID API 密钥。
- 首选:点击密钥图标,即可从保密库导入现有密钥。
- 可复制和粘贴现有密钥。
- 单击继续。
端点字段为可选项。 建议在工具链设置期间或管道运行期间选择或提供端点。
部署
配置清单目标和部署应用程序的 Kubernetes 集群:
-
默认 应用程序名称为
hello-compliance-app
。 -
键入您的 IBM Cloud API 密钥。 API 密钥用于在多项任务中与 IBM Cloud CLI 工具交互。
- 首选:点击密钥图标,即可从保密库导入现有密钥。
- 可复制和粘贴现有密钥。
- 点击 新建 + 可以创建新密钥。
新生成的 API 密钥可立即保存到保密库中。
-
如果 API 密钥有效且有足够的访问权限,Container Registry, Container Registry 命名空间、开发集群区域、资源组、集群名称、集群命名空间已自动填充。 您可以更改其中任何字段,以符合您的配置。
-
单击继续。
神器签名
工件由工具链构建并记录在清单中,在部署到生产中之前必须签名。 管道使用 Skopeo 作为默认工具来提供工件签名功能。 您可以使用现有的 GPG 密钥或创建新的 GPG 密钥对。
- 输入 GnuPG 专用密钥。 或者,您也可以单击 NEW 创建一个新的 GPG 密钥。 有关详细信息,请参阅 生成 GPG 密钥。
- 单击继续。
DevOps Insights
IBM Cloud DevOps Insights 包含在工具链中。 从每个部署和环境中查看每次构建的管道测试结果。
- 接受默认配置。
- 单击继续。
可选工具
Slack
配置 Slack 以接收有关拉取请求或 CI 管道事件的通知。 您也可以在创建工具链后添加 Slack 工具。
- 输入您的 Slack 网络钩子。 有关更多信息,请参阅 Slack webhook。
- 输入您的黑客频道来发布消息。
- 输入空白队名。 例如,如果您的团队网址是
https://team.slack.com
,那么团队名称就是team
。 - 选择要为 Automated Slack Notifications 接收通知的事件。
- 单击继续。
通用 DevOps Insights 工具链
DevOps Insights可选择性地包含在创建的工具链中,并在每次合规性检查证据发布后加入。 工具链可以使用现有的 DevOps Insights 实例向 insights 发布部署记录。 您可以通过提供集成 ID 从其他工具链链接 DevOps Insights 集成。
- 接受 当前工具链。
- 单击继续。
您可以从工具链的 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 提供了源代码总体运行状况和质量的概述,并重点阐述了在新代码中发现的问题。 静态代码分析器可检测多种编程语言的棘手错误,如空指针取消引用、逻辑错误和资源泄漏。
- 接受 默认配置。
- 单击继续。
创建 CI 工具链
- 在摘要页面,单击 创建。
- 等待工具链创建。 这可能需要几分钟时间。
探索 CI 工具链
如屏幕截图所示,CD 工具链已创建,并包含两个管道。 单击 ci-pipeline
磁贴打开并运行推广管道。

运行 PR-CI 管道
要启动 ci-pr pipeline
,您需要在应用程序存储库中创建一个合并请求。
-
从 CI 工具链页面,单击
pr pipeline
磁贴。 默认情况下,创建的名称为compliance-app-<timestamp>
。 -
从主分支创建分支
-
更新应用程序中的代码或添加自述文件,并保存更改。
-
提交 合并请求。
-
在 CI 工具链页面,单击 pr-pipeline 磁贴。 验证合并请求的创建是否触发了
ci-pr pipeline
。 -
等待
ci-pr pipeline
运行完成。 应用程序版本库中的相应合并请求处于Pending
状态,直到 PR 管道的所有阶段都成功完成。 -
PR 管道运行成功后,单击管道可查看已完成的众多步骤并查看页面。 要编辑并重新提交合并请求,请按照第 3 步至第 7 步操作。
图 2。 DevSecOps 公关管道成功
简化管道中的任务流程
在DevSecOps PR 任务流水线流程中,省略了实用程序任务。 例如,GitHub, 凭据获取等。 在 DevSecOps 世界中,左移是一种预防和发现缺陷、安全漏洞等问题的做法。 如图所示,左移还可以在软件交付流程的早期执行合规性检查。

- 可在代码/资源库上运行的检查,不需要构建。 应尽早运行该工件,以防止不合规的代码被合并到版本库的主分支。 没有从公关渠道收集证据。 管道的目标是将合规检查尽可能向左移。
- 所有检查都在管道运行时进行。 即使前一个检查失败,流水线也会继续进行下一个检查。 要评估运行中是否有任何故障,需要检查管道的最后一步,这一步有一个管道评估器。
- 如果您正在尝试合并紧急修复,并希望绕过合规性检查。 在合并请求中添加一个标签,标明修复内容。 运行光盘管道时必须提供相同的标签。
运行公关管道
您可以通过以下方式之一启动 CI 管道:
- 自动:在 PR 管道成功后,批准 PR 并将其合并到主分支。
- 手动:要手动触发 CI 管道,请选择交付管道卡,单击 运行管道,然后选择 手动触发。
在本教程中,CI 管道是在您将代码更改合并到应用程序版本库的主分支后触发的。
- 在 CI 工具链页面上,单击 cii-pipeline 磁贴。
- 针对管道名称单击 Run。 观察管道运行情况。 等待管道运行完成。
- CI 管道运行成功后,单击管道探索已完成的步骤,查看页面,如屏幕截图所示。
运行 CI 管道
在本文中,CI 管道是在您将代码更改合并到应用程序版本库的主分支后触发的。
- 在 CI 工具链页面上,单击 cii-pipeline 磁贴。
- 观察:管道运行正在运行。 等待管道运行完成。
CI 管道运行成功后,您可以单击管道任务查看已完成的步骤。

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

从 CI 管道中的所有合规性检查中收集证据,并将其存储到工具链设置时提供的证据锁定库中。 来自 CI 的证据存储在 raw/ci/<pipeline-run-id>/*.json
下。
证据将发布到工具链中的 DevOps Insights 实例。 您可以点击工具链中的 DevOps Insights 工具卡进行导航。 您可以在“质量控制面板”页面查看收集到的证据。

要评估管道运行中是否有任何故障,必须检查管道的最后一步,这一步有一个管道评估器。
查看运行中的应用程序
成功运行 CI 管道后,示例应用程序将部署到 Kubernetes 集群上,并在 dev 命名空间中运行。
在 CI 管道运行的 run stage
步骤 deploy-dev
任务的日志末尾,可以找到应用程序 URL。 使用该 URL 验证应用程序是否正在运行。

配置管道
添加 commit-id
文本属性。
- 单击添加属性。
- 选择文本属性。
如果手动触发管道而不使用 commit-id
,管道会从应用程序的主分支获取最新的提交 ID。
示例

添加触发器参数。
- 单击 运行管道。
- 选择 手动触发器。
- 单击运行。