应用程序预览 拉取请求 (PR) 管道
应用程序预览拉取请求(PR)管道扩展了正常的 PR 管道,增加了额外的阶段,以便在将更改合并到主分支之前对应用程序进行容器化、扫描、部署和预览。
概述
该管道旨在通过预览环境实现早期反馈,从而改进开发工作流程。 它在基本 PR 管道中添加了自定义阶段,如部署和验收测试,这对代码合并前的功能验证非常有用。
应用程序预览管道用于
- 构建应用程序并将其容器化
- 执行人工制品扫描
- 将应用程序部署到预览环境
- 运行验收测试以验证功能
应用程序 - 预览公关管道阶段
阶段名称 | 描述 |
---|---|
代码pr-start | 初始阶段用于设置管道运行、验证拉取请求事件并为后续步骤准备元数据。 |
代码设置 | 用户自定义设置脚本的占位符,用户可在此完成管道设置。 |
代码检测-秘密 | 使用秘密检测工具扫描代码库,查找硬编码秘密或敏感数据 |
代码单元测试 | 运行单元测试以验证应用程序组件的功能。 这样可以确保新代码不会破坏现有逻辑。 |
静态代码扫描 | 执行静态代码分析,查找错误和漏洞。 |
代码合规检查 | 检查政策合规性,包括许可证和安全规则。 |
构建工件 | 将应用程序构建并打包为可部署的构件。 |
构建-扫描-工件 | 扫描构建的人工制品,查找安全漏洞。 |
部署应用程序预览 | 将应用程序部署到临时预览环境。 |
部署验收测试 | 针对已部署的预览版本运行验收测试。 |
app-preview-pr-finish | 最终确定管道、更新 PR 状态、记录结果并执行清理。 |
比较:PR Pipeline 与 App Preview PR Pipeline 的比较
应用程序预览公关管道是常规公关管道的扩展,它通过增加构建、扫描、部署和预览应用程序的阶段来构建。
应用程序预览公关管道有助于及早发现问题,并确保更改在模拟生产环境中的表现符合预期。
公关管道阶段 | 应用程序预览 PR 管道阶段 |
---|---|
code-pr-start |
code-pr-start |
code-setup |
code-setup |
code-detect-secrets |
code-detect-secrets |
code-unit-tests |
code-unit-tests |
code-compliance-checks |
code-static-scan |
code-pr-finish |
code-compliance-checks |
build-artifact |
|
build-scan-artifact |
|
deploy-app-preview |
|
deploy-acceptance-tests |
|
app-preview-pr-finish |
这些额外的阶段允许
- 静态代码扫描 (
code-static-scan
) - 构建可部署工件 (
build-artifact
) - 扫描人工制品以查找漏洞 (
build-scan-artifact
) - 部署到预览环境 (
deploy-app-preview
) - 运行验收测试 (
deploy-acceptance-tests
)
自定义管道阶段和任务
下表列出了在 App-Preview PR 管道中运行的任务。 此外,该表还提供了每个阶段的概况:
-
任务或阶段:指
.pipeline-config.yaml
配置文件中定义的阶段名称。 -
简要说明:简短说明:简明扼要地解释在执行阶段中执行的操作。
-
允许自定义:这表示用户是否可以通过在
.pipeline-config.yaml
文件中插入自定义脚本,灵活地修改或替换舞台的默认行为。 -
默认参考实现:这表示 DevSecOps 管道是否带有预定义或默认的阶段实现。 值得注意的是,对于某些阶段,如
unit-tests
或setup
,DevSecOps 管道没有提供任何开箱即用的实现。 相反,用户需要根据其应用程序的要求提供定制脚本或代码。 -
证据收集:这表示该阶段是否执行标准证据收集。 当 DevSecOps Pipeline 为某个阶段提供了参考实现时,证据收集就会立即执行。 但是,如果用户选择修改或替换这些预定义阶段,则必须确保其自定义实施包括适当的证据收集。 如果 DevSecOps 管道没有提供开箱即用的实施方案,用户就必须进行证据收集,这同样是用户的责任。 该栏表示负责进行证据收集的实体 (用户/管道 )。
-
允许跳过(适用于版本 >= v10 ):这表示用户是否可以通过在
.pipeline-config.yaml
中将跳过属性设置为 true 来选择不运行此阶段。 不过,在使用该功能时,尤其是在收集证据的阶段,请务必谨慎。 跳过这些阶段可能会导致遗失重要的建设证据。
任务或阶段 | 简短描述 | 允许的定制 .pipeline-config.yaml |
默认参考实施 | 证据收集 | 允许跳过 |
---|---|---|---|---|---|
start |
设置管道环境 | 否 | 是 | 管道 | 否 |
setup |
设置构建和测试环境 | 是 | 否 | 不适用 | 否 |
detect-secrets |
对程序代码运行检测机密扫描。 | 是 | 是 | 管道 | 否 |
test |
在应用程序代码上运行单元测试和应用测试。 | 是 | 否 | 用户 | 是 |
static-scan |
在应用程序代码上运行静态扫描代码。 | 是 | 是 | 管道 | 是 |
compliance-checks |
在应用程序软件仓库上运行代码风险分析器扫描和其他合规性检查。 | 是 | 是 | 管道 | 是 |
build-artifact |
制作工艺品。 | 是 | 否 | 不适用 | 否 |
build-scan-artifact |
扫描构建的人工制品,查找安全漏洞。 | 是 | 是 | 管道 | 是 |
deploy-app-preview |
将应用程序部署到临时预览环境。 | 是 | 否 | 不适用 | 否 |
deploy-acceptance-tests |
针对已部署的预览版本运行验收测试。 | 是 | 否 | 用户 | 是 |
app-preview-pr-finish |
最终确定管道、更新 PR 状态并记录结果。 | 是 | 是 | 不适用 | 是 |
有关如何使用 .pipeline-config.yaml
文件自定义阶段的更多信息,请参阅 自定义脚本 和 管道参数 列表。
在管道阶段收集证据
任务或阶段 | 证据类型 |
---|---|
start |
不适用 |
setup |
不适用 |
detect-secrets |
com.ibm.detect_secrets |
test |
com.ibm.unit_tests |
static-scan |
com.ibm.static_scan |
compliance-checks |
com.ibm.code_bom_check , com.ibm.code_cis_check , com.ibm.code_vulnerability_scan , com.ibm.branch_protection |
build-artifact |
不适用 |
build-scan-artifact |
com.ibm.cloud.image_vulnerability_scan |
deploy-app-preview |
不适用 |
deploy-acceptance-tests |
com.ibm.acceptance_tests |
app-preview-pr-finish |
com.ibm.pipeline_logs ,com.ibm.pipeline_run_data |
有关如何使用 collect-evidence
脚本在自定义用户阶段收集证据的更多信息,请参阅 收集证据脚本。
先决条件
确保:
-
使用“创建工具链”选项创建 CI 工具链。
-
Git PR 触发器。
-
为图像注册和部署正确配置了所需的环境变量和权限。
设置应用程序预览公关管道
1.设置触发器
配置管道触发器:
-
您可以修改现有 PR 管道触发器。
-
转到 CI 管道的“触发器”部分。
-
更新 Git PR 触发器:
-
将
EventListener
设置为app-preview-pr-listener
-
保存更改
或者,创建一个新的触发器:
-
进入 PR 管道,点击添加,然后点击 Git 版本库。
-
选择
EventListener
作为app-preview-pr-listener
。 -
以现有 Git PR 触发器为参考,填写其余字段。
-
禁用旧的 Git PR 触发器,启用新的
app-preview-trigger
。
现在,当创建新的拉取请求时,app-preview
触发器将被激活。
2.所需的环境属性
除了 PR 管道所需的环境属性外,还需在管道设置中正确配置以下属性,以确保 App Preview PR 管道成功运行。
名称 | 类型 | 描述 |
---|---|---|
app-url |
文本 | 预览应用程序的 URL。 |
registry-namespace |
文本 | 图像的 Container Registry 命名空间。 |
registry-region |
文本 | 图像注册表的 IBM Cloud 区域。 |
现在,当提出新的拉取请求时,将自动触发 app-preview PR 管道。
检测秘密 扫描
IBM Detect Secrets 工具可识别应用程序代码中可见的秘密。 有关为扫描设置软件仓库的更多信息,请 访问此处
静态代码扫描
静态代码扫描阶段会在指定的应用程序库上运行一些静态代码分析工具。
pipelinectl save_repo 命令提供的 repo 和默认应用程序 repo 会被扫描。
您可以使用以下任何一种方法将静态代码添加到管道中:
-
通过将 SonarQube 工具添加到工具链,提供已运行的 SonarQube 实例名称 URL 和凭据。 static-scan 任务会对指定的软件仓库进行扫描。
-
如果没有自己的 SonarQube 实例,管道会在管道运行期间创建一个 SonarQube 实例。 您可以在静态扫描阶段成功运行后访问该实例。
-
使用
opt-in-gosec
参数运行 gosec 扫描,以检查 golang 安全性。 -
在
.pipeline-config.yaml
文件的 static-scan 自定义阶段中添加自己的静态扫描代码,以实现自定义功能。
将 SonarQube 扫描添加到您的管道中
有关将 SonarQube 与持续集成管道集成的更多信息,请参阅 配置 SonarQube。
将 GoSec 扫描集成到您的管道中
使用 gosec 检查扫描软件源中的 Golang 源代码。
要启用 GoSec 扫描,请提供以下参数:
名称 | 类型 | 描述 | 必需或可选 |
---|---|---|---|
opt-in-gosec |
文本 | 启用 gosec 扫描的选项 | 可选 |
更多信息,请参阅 配置 GoSec。
使用其他静态扫描仪
如果想使用自己的静态扫描实现,可以修改 .pipeline-config.yaml
文件,并将 自定义脚本 添加到 static-scan
阶段。
合规性检查中的扫描和检查
扫描或检查 | 描述 |
---|---|
代码风险分析器漏洞扫描 | 使用代码风险分析器查找应用程序软件包依赖项、容器基础镜像和操作系统软件包的漏洞。 |
代码风险分析器 CIS 检查 | 使用代码风险分析器对 Kubernetes 部署清单进行 配置检查。 |
代码风险分析器 BOM 检查 | 指定 repo 的 BOM,其中包含所有依赖关系的来源。 该 BOM 是按不同粒度收集的。 例如,BOM 可捕获构建过程中使用的基础镜像列表、基础镜像中的软件包列表以及安装在基础镜像上的应用程序软件包列表。 BOM 可作为分析结果的基本事实,并可用于执行政策门限。 使用代码风险分析器工具。 |
存储库合规性检查 | 检查分支保护设置是否正确。 例如,主/主分支应始终限制强制推送。 更多信息,请参阅 配置 Git Repos and Issue Tracking 版本库。 |
这些扫描会在管道知道的所有应用软件库上运行。
要在这些扫描中添加软件源,请在设置阶段使用 pipelinectl
界面。
有关用户脚本阶段预期输出的更多信息,请参阅 自定义脚本。
构建阶段
在 "构建 "阶段,您可以构建自己的人工制品。
虽然该管道为 Docker 图像人工制品提供了默认功能,但您可以构建任何类型的人工制品。
使用管道用户界面中配置的环境变量为构建提供凭证、机密和参数。
这些变量可在本阶段和所有自定义阶段中使用。
有关如何在自定义脚本中访问参数和秘密的详细信息,请参阅 自定义脚本。
人工制品扫描
在 App-Preview PR 管道中:
- 只进行文物扫描。
- 扫描使用 Container Registry Vulnerability Advisor 检查已构建的 Docker 映像中的漏洞。
您可以根据需要修改 .pipeline-config.yaml
文件,自定义扫描行为。
部署
部署阶段将构建的工件部署到环境中。