使用 Jenkins 和容器配置扫描自动化

HCL® AppScan® Source 命令行界面 (CLI) 容器可从 HCL Harbor 和 我的 HCLSoftware 门户网站 (MHS) 获得,可用于使用 Jenkins 自动执行静态分析扫描,而无需安装 AppScan® Source 的完整实例。

使用容器扫描的主要步骤包括:
  1. 准备应用程序
  2. 准备运行时环境
  3. 从容器映像启动扫描

先决条件

开始之前,确保您的环境符合以下需求:
  • Jenkins 环境,其中包含一个或多个安装了 Podman 的 Linux 代理程序/主机。

    这是旨在使用 CLI 容器运行静态分析扫描的系统。

  • AppScan® Source for Automation 的有效许可证和相关许可证服务器信息。

  • AppScan® Source CLI 容器映像

    HCL HarborAppScan® Source 下载 我的 HCLSoftware 门户网站 CLI 容器映像。使用有效的许可证,您的 HCL 标识将授予对这些位置的访问权。

  • AppScan® Source CLI 脚本

    在 Jenkins 管道中使用容器进行扫描时需要脚本。

  • 从容器访问 Jenkins 主机/代理程序相关的内容:

    要扫描的应用程序必须可以从运行扫描的 Jenkins 主机进行访问。

    注: 卷映射(将容器主机上的路径映射到容器中的路径)在扫描实例化期间用于此目的。

准备要扫描的应用程序

使用以下任一方法准备用于扫描的应用程序:
  • paf/ppf 文件
  • 文件夹扫描
准备要使用 paf/ppf 文件扫描的应用程序
  1. 在安装了 HCL® AppScan® Source for Analysis 的 Linux 系统上使用 AppScan® Source 客户机生成 paf/ppf 文件。

    确保 pafppf 文件位于要扫描的应用程序的根目录。

  2. 确保可以从 Jenkins 主机/代理程序访问应用程序文件和 paf/ppf 文件。

    例如,如果应用程序可从 Jenkins 主机/代理程序上的根路径 /usr/user1/SampleApp 访问,则 paf/ppf 文件位于 /usr/user1/SampleApp/SampleApp.paf/usr/user1/SampleApp/SampleApp.ppf

  3. 确定容器所看到的卷的名称。
    例如,将主机上的 /usr/user1 映射到容器中的 cvol
    注: 在容器中运行 CLI 时指定了卷映射。
  4. 创建 CLI 脚本。例如,SampleApp.script 位于 /usr/user1/SampleApp
    在本示例中,脚本指示容器使用 cvol 路径访问应用程序内容。列出的命令是与 AppScan® Source CLI 结合使用的命令(在没有手动干预的情况下扫描)。
    login …
    oa /cvol/SampleApp/SampleAll.ppf
    scan
    …
    logout
准备用于文件夹扫描的应用程序
  1. 确保可以从 Jenkins 主机/代理程序访问应用程序文件。

    例如,应用程序可从 Jenkins 主机/代理程序上的路径 /usr/user1/SampleApp 访问。

  2. 确定容器所看到的卷的名称。
    例如,将主机上的 /usr/user1 映射到容器中的 cvol
    注: 在容器中运行 CLI 时指定了卷映射。
  3. 创建 CLI 脚本。例如,SampleApp.script 位于 /usr/user1/SampleApp
    login …
    of /cvol/SampleApp/SampleAll
    scan
    …
    logout

在 Jenkins 主机/代理程序上准备运行时环境

要在 Jenkins 主机/代理程序上准备运行时环境,请执行以下操作
  1. AppScan® Source我的 HCLSoftware 门户网站 CLI 容器下载到 Jenkins 主机,或者直接从 HCL Harbor 访问。

    如果已从 MHS 下载,使用 podman load 命令装入 CLI 容器映像。

  2. 创建一个文件(例如 env.list),其中包含在扫描期间必须可供 CLI 容器使用的环境变量列表。一些必需的信息包括:
    AS_INSTALL_MODE=standalone
    AS_LICENSE_URL=<license server url>
    可在此处找到完整的参数列表。

使用容器映像启动静态分析扫描

使用以下两种方法之一启动扫描:

使用 HCL Harbor 中的容器映像启动扫描

使用 Linux shell 命令或 Podman Linux 插件运行扫描:
  • Linux
    将以下 shell 命令合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的 /usr/user1 映射到容器中的 cvol。根据所需的 CLI 容器版本调整版本字符串。
    sh "podman run --rm --volume /usr/user1:/cvol --env-file /cvol/SampleApp/ env.list hclcr.io/appscan/appscan-src-cli:10.10.0 script /cvol/SampleApp/SampleApp.script
  • Podman Jenkins 插件
    将以下 Podman Jenkins 插件 API 合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的 /usr/user1 映射到容器中的 cvol。根据所需的 CLI 容器版本调整版本字符串。
    podman.image('hclcr.io/appscan/appscan-src-cli:10.10.0').run('--name container-SampleApp --rm –-volume /usr/user1:/cvol --env-file /cvol/SampleApp/env.list script /cvol/SampleApp/SampleApp.script')
    
    sh "podman logs --follow container-SampleApp"

使用 我的 HCLSoftware 门户网站 中的容器映像启动扫描

AppScan® Source CLI 容器映像在 我的 HCLSoftware 门户网站 中以存档格式 (tar.gz) 提供。必须先装入容器映像,然后才能使用它进行扫描。
  1. 将容器映像下载到 Jenkins 主机/代理程序。例如,/appscansrc/appscan-src-cli-10.10.0.tar.gz

    必须先装入容器映像,然后才能使用。

  2. 使用 Linux shell 命令或 Podman Linux 插件运行扫描:
    • Linux
      将以下 shell 命令合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的 /usr/user1 映射到容器中的 cvol。根据所需的 CLI 容器版本调整版本字符串。
      podman load -i /appscansrc/appscan-src-cli-10.10.0.tar.gz
      
      sh "podman run --rm --env-file /cvol/SampleApp/env.list --volume /usr/user1:/cvol appscansrc/appscan-src-cli:10.10.0 script /cvol/SampleApp/cli.script"
    • Podman Jenkins 插件
      将以下 Podman Jenkins 插件 API 合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的 /usr/user1 映射到容器中的 cvol。根据所需的 CLI 容器版本调整版本字符串。
      podman.image(‘appscan-src-cli:10.10.0').run('--name container-SampleApp --rm –-volume /usr/user1:/cvol --env-file /cvol/SampleApp/env.list script /cvol/SampleApp/SampleApp.script')
      
      sh "podman logs --follow container-SampleApp"
注: 从版本 10.3.0 开始,AppScan® Source 支持使用 Podman 进行容器化。由于 Red Hat Enterprise Linux 8 和 9 中不支持 Docker,因此如果您的主机运行的是 RHEL 8 或 9,请使用 Podman。Podman 支持所有主要的 Docker 命令;将本主题中示例内的 Docker 替换为 Podman 即可在 Podman 环境中创建容器并进行扫描。