使用 Jenkins 和容器配置扫描自动化
HCL®AppScan® 源代码 命令行界面 (CLI) 容器可从 HCL Harbor 和 HCL FlexNet Operations (FNO) 门户网站获得,可用于使用 Jenkins 自动执行静态分析扫描,而无需安装 AppScan® 源代码 的完整实例。
使用容器进行扫描的主要步骤如下:
- 准备应用程序
- 准备运行时环境
- 从容器映像启动扫描
先决条件
在开始之前,请确保您的环境满足以下要求:
- Jenkins 环境,包括已安装 Docker 的一个 Linux 代理程序/主机。
这是旨在使用 CLI 容器运行静态分析扫描的系统。
-
AppScan® Source for Automation 的有效许可证和相关许可证服务器信息。
-
AppScan® 源代码 CLI 容器映像
从 HCL Port 或 HCL FNO 下载 AppScan® 源代码 CLI 容器映像。具有有效许可证时,您的 HCL 标识将授予对这些位置的访问权限。
-
AppScan® 源代码 CLI 脚本
在 Jenkins 管道中使用容器进行扫描需要脚本。
-
从容器访问 Jenkins 主机/代理程序上的内容:
必须从运行扫描的 Jenkins 主机访问要扫描的应用程序。
注: 在扫描实例化期间,卷映射(将容器主机上的路径映射到容器中的路径)用于此目的。
准备要扫描的应用程序
使用以下任一方法准备应用程序以进行扫描:
paf
/ppf
文件- 文件夹扫描
使用
paf
/ppf
文件准备要扫描的应用程序- 在已安装 AppScan® 源代码 的 Linux 系统上使用 HCL®AppScan® Source for Analysis 客户机生成
paf
/ppf
文件。确保
paf
和ppf
文件位于要扫描的应用程序的根目录下。 - 确保可以从 Jenkins 主机/代理程序访问应用程序文件和
paf
/ppf
文件。例如,如果可以在 Jenkins 主机/代理程序上的根路径
/usr/user1/SampleApp
访问应用程序,则paf
/ppf
文件位于/usr/user1/SampleApp/SampleApp.paf
和/usr/user1/SampleApp/SampleApp.ppf
。 - 确定容器看到的卷的名称。 例如,将主机上的
/usr/user1
映射到容器中的cvol
。注: 在容器中运行 CLI 时指定卷映射。 - 创建 CLI 脚本。例如,
SampleApp.script
在 /usr/user1/SampleApp
中。对于此示例,脚本告知容器使用cvol
路径访问应用程序内容。列出的命令是与 AppScan® 源代码 CLI 配合使用的命令(扫描时不需要进行手动干预)。login … oa /cvol/SampleApp/SampleAll.ppf scan … logout
准备文件夹扫描的应用程序:
- 确保可以从 Jenkins 主机/代理程序访问应用程序文件。
例如,可以在 Jenkins 主机/代理程序上的路径/
usr/user1/SampleApp
访问该应用程序。 - 确定容器看到的卷的名称。例如,将主机上的
/usr/user1
映射到容器中的cvol
。注: 在容器中运行 CLI 时指定卷映射。 - 创建 CLI 脚本。例如,
/usr/user1/SampleApp
中的SampleApp.script
。login … oa /cvol/SampleApp/SampleAll.ppf scan … logout
在 Jenkins 主机/代理程序上准备运行时环境
要在 Jenkins 主机/代理程序上准备运行时环境,请执行以下操作:
- 从 HCL FNO 将 AppScan® 源代码 CLI 容器下载到 Jenkins 主机,或直接从 HCL Harbor 访问。
如果从 HCL FNO 下载,请使用
docker load
命令装入 CLI 容器映像。 - 创建一个包含环境变量列表的文件(例如
env.list
),这些环境变量必须在扫描期间提供给 CLI 容器。一些必需的信息包括:
可以在此处找到完整的参数列表。AS_INSTALL_MODE=standalone AS_LICENSE_TYPE=CLS AS_LICENSE_SERVER_ID=<specify the license server ID>
使用容器映像启动静态分析扫描
通过以下两种方式之一启动扫描:
- 使用来自 HCL Port 的容器映像
- 使用来自 FlexNet Operations (FNO) 的容器映像
使用来自 HCL Port 的容器映像启动扫描
使用 Linux shell 命令或 Docker Linux 插件运行扫描:
- Linux将以下 shell 命令合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的
/usr/user1
映射到容器中的cvol
。根据所需的 CLI 容器版本调整版本字符串。sh "docker run --rm --volume /usr/user1:/cvol --env-file /cvol/SampleApp/ env.list hclcr.io/appscan/appscan-src-cli:10.1.0 script /cvol/SampleApp/SampleApp.script
- Docker Jenkins 插件将以下 Docker Jenkins 插件 API 合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的
/usr/user1
映射到容器中的cvol
。根据所需的 CLI 容器版本调整版本字符串。docker.image('hclcr.io/appscan/appscan-src-cli:10.1.0').run('--name container-SampleApp --rm –-volume /usr/user1:/cvol --env-file /cvol/SampleApp/env.list script /cvol/SampleApp/SampleApp.script') sh "docker logs --follow container-SampleApp"
使用来自 HCL FNO 的容器映像启动扫描
AppScan® 源代码 CLI 容器镜像在 HCL FNO 中以存档格式 (
tar.gz
) 提供。必须先装入容器映像,然后才能用来进行扫描。- 将容器映像下载到 Jenkins 主机/代理程序。例如,
/appscansrc/appscan-src-cli-10.1.0.tar.gz
。必须先装入容器映像,然后才能使用。
- 使用 Linux shell 命令或 Docker Linux 插件运行扫描:
- Linux将以下 shell 命令合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的
/usr/user1
映射到容器中的cvol
。根据所需的 CLI 容器版本调整版本字符串。docker load -i /appscansrc/appscan-src-cli-10.1.0.tar.gz sh "docker run --rm --env-file /cvol/SampleApp/env.list --volume /usr/user1:/cvol appscansrc/appscan-src-cli:10.1.0 script /cvol/SampleApp/cli.script"
- Docker Jenkins 插件将以下 Docker Jenkins 插件 API 合并到 Jenkins 管道中以扫描 SampleApp。请注意,Jenkins 主机/代理程序上的
/usr/user1
映射到容器中的cvol
。根据所需的 CLI 容器版本调整版本字符串。docker.image(‘appscan-src-cli:10.1.0').run('--name container-SampleApp --rm –-volume /usr/user1:/cvol --env-file /cvol/SampleApp/env.list script /cvol/SampleApp/SampleApp.script') sh "docker logs --follow container-SampleApp"
- Linux