You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins中借助ZAP插件执行Selenium Java脚本并生成报告

我来帮你梳理下如何实现Jenkins + ZAP插件 + Selenium Java脚本的完整集成流程,刚好我之前做过类似配置,踩过不少坑,分享给你:

实现Jenkins + ZAP插件 + Selenium Java脚本的集成方案

1. 预构建阶段启动ZAP代理

首先确保你已经在Jenkins插件市场安装了OWASP ZAP Plugin,然后按以下步骤配置预构建启动:

  • 进入Jenkins项目的「配置」页面,找到「Pre-build Steps」区域,点击「Add build step」选择「Invoke ZAP」
  • 核心配置项:
    • 勾选「Start ZAP daemon」,指定ZAP的安装路径(如果是自动下载ZAP,可留空让插件自动处理)
    • 设置代理端口(比如固定为8080,后续Selenium脚本要和这个端口一致);怕端口冲突的话,可以勾选「Random Port」,同时开启「Export ZAP port to environment variable」,变量名设为ZAP_PORT方便后续脚本读取
    • 按需设置API Key(如果你的ZAP启用了API认证)
    • 建议勾选「Shutdown ZAP daemon after build」,确保构建结束后自动清理ZAP进程

2. 调整Selenium Java脚本适配ZAP代理

你的现有脚本只需要添加代理配置,确保所有浏览器流量走ZAP。这里给你Chrome浏览器的示例代码,其他浏览器逻辑类似:

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class ZAPEnabledSeleniumTest {
    public static void main(String[] args) {
        // 读取Jenkins环境变量里的ZAP端口(如果用了随机端口),没读到就用默认8080
        String zapPort = System.getenv("ZAP_PORT") != null ? System.getenv("ZAP_PORT") : "8080";
        String proxyAddress = "localhost:" + zapPort;

        // 配置ZAP代理
        Proxy zapProxy = new Proxy();
        zapProxy.setHttpProxy(proxyAddress);
        zapProxy.setSslProxy(proxyAddress);

        ChromeOptions options = new ChromeOptions();
        options.setProxy(zapProxy);
        // 忽略证书错误:ZAP会拦截HTTPS流量,浏览器默认会报错,加这个参数跳过
        options.addArguments("--ignore-certificate-errors");
        // 如果是Linux环境运行Jenkins,可能需要加这个参数避免Chrome启动失败
        options.addArguments("--no-sandbox");

        WebDriver driver = new ChromeDriver(options);
        try {
            // 这里替换成你的业务测试逻辑
            driver.get("https://your-test-application.com");
            // ... 其他操作步骤
        } finally {
            driver.quit();
        }
    }
}

注意:如果Jenkins是在远程节点运行,localhost要替换成节点的IP/主机名,确保Selenium脚本能访问到同一节点上的ZAP代理。

3. 执行脚本并让ZAP生成报告反馈到Jenkins

  • 执行Selenium脚本:在Jenkins的「Build Steps」里添加执行步骤,如果是Maven项目,选择「Invoke top-level Maven targets」,目标写test(如果脚本放在测试目录)或者exec:java -Dexec.mainClass="com.yourpackage.ZAPEnabledSeleniumTest";如果是普通Java项目,用「Execute shell」或「Execute Windows batch command」直接运行编译后的class文件。
  • 生成并发布ZAP报告:在「Post-build Steps」里点击「Add post-build action」,选择「Publish ZAP Report」,配置报告路径(ZAP默认会在${WORKSPACE}下生成zap-report.html),还可以设置漏洞阈值(比如高危漏洞数量超过1就标记构建失败),这样Jenkins页面就能直接看到ZAP的扫描结果。

4. 自动关闭ZAP代理

只要你在预构建的ZAP配置里勾选了「Shutdown ZAP daemon after build」,Jenkins会在构建完成(无论成功/失败)后自动关闭ZAP进程。如果遇到进程残留的情况,可以在「Post-build Steps」里加一个执行shell步骤,手动杀掉ZAP进程:

# Linux环境
pkill -f zaproxy
# Windows环境
taskkill /F /IM zaproxy.exe

常见坑点提醒

  1. 证书信任问题:如果测试的是HTTPS站点,浏览器可能会因为不信任ZAP的根证书而无法访问。可以从ZAP的「Tools -> Options -> Dynamic SSL Certificates」导出根证书,然后在Jenkins节点上安装到浏览器的信任库,或者在ChromeOptions里添加--certificate-authority=/path/to/zap-root-cert.cer参数。
  2. 权限问题:Linux环境下Jenkins运行用户需要有启动浏览器和ZAP的权限,避免用root用户运行,必要时给用户添加相关权限。
  3. 网络延迟:如果Selenium脚本执行太快,ZAP可能还没完成扫描,可以在脚本最后加一段等待时间,或者用ZAP的API确认扫描完成后再结束脚本。

内容的提问来源于stack exchange,提问作者syndy1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:05:23