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

企业代理环境下Jenkins执行Jest测试失败,本地执行正常

解决Jenkins执行Puppeteer测试时的企业代理连接问题

看起来你碰到了企业代理环境下,Jenkins与本地执行环境权限/配置不一致的典型问题——本地跑命令完全正常,但Jenkins执行就报net::ERR_TUNNEL_CONNECTION_FAILED,代理验证还返回407。结合你已经禁用防火墙的情况,我整理了几个可能的原因和对应的解决办法:

1. Jenkins服务账户没有代理访问权限

Jenkins默认是以Local System账户作为Windows服务运行的,这个系统账户通常没有权限使用需要域凭据验证的企业代理,也无法读取你在Jenkins里配置的代理凭据。

解决步骤:

  • 打开Windows服务管理器(输入services.msc启动),找到Jenkins服务
  • 右键点击「属性」,切换到「登录」标签页
  • 选择「此账户」,输入拥有企业代理访问权限的域账户(格式:domain\username)和对应密码
  • 点击「应用」后重启Jenkins服务,再重新运行测试

2. Puppeteer未继承Jenkins的代理配置

Jenkins的全局代理配置是给自身使用的(比如插件更新、拉取代码),但Puppeteer作为独立的Node.js进程,不会自动继承这个配置,需要你在测试代码中手动指定代理参数:

const puppeteer = require('puppeteer');

(async () => {
  // 替换成你的企业代理信息
  const proxyHost = 'your-proxy-domain.com';
  const proxyPort = '8080';
  // 域账户格式注意用双反斜杠转义,密码有特殊字符需URL编码
  const proxyAuth = 'domain\\\\username:your-password';

  const browser = await puppeteer.launch({
    args: [
      `--proxy-server=http://${proxyHost}:${proxyPort}`,
      `--proxy-auth=${proxyAuth}`
    ]
  });

  const page = await browser.newPage();
  // 可选:设置常见浏览器的User-Agent,避免被代理拦截
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');
  
  try {
    await page.goto('https://google.com/');
    // 你的测试逻辑
  } catch (err) {
    console.error('页面访问失败:', err);
  } finally {
    await browser.close();
  }
})();

3. Jenkins执行环境缺少npm代理配置

虽然你本地的npm配置没问题,但Jenkins运行的环境可能没有设置代理,导致npm在执行测试时无法正常访问外部资源(你的测试已经启动,这点可能性稍低,但可以排查确认):

在Jenkins的构建步骤中先添加以下命令,检查当前npm代理配置:

npm config list

如果没有proxy和https-proxy项,手动添加:

npm config set proxy http://domain\\\\username:password@proxy-host:port
npm config set https-proxy http://domain\\\\username:password@proxy-host:port

注意:密码中的特殊字符需要进行URL编码(比如@换成%40,:换成%3A)

4. 企业代理的访问控制限制

有些企业代理会针对特定程序、IP或账户设置白名单,可能Jenkins所在机器的IP,或者Jenkins服务账户不在代理的允许访问列表中:

  • 联系公司IT部门,确认Jenkins服务器的IP地址、服务账户是否被加入代理的白名单
  • 检查代理是否会拦截Puppeteer的默认User-Agent,尝试在代码中设置常见浏览器的User-Agent(如上面代码示例)

5. 代理环境变量未传递给子进程

Jenkins的全局代理配置不会自动传递给它启动的子进程(比如npm、node),你可以在构建步骤中手动设置环境变量,让子进程继承代理配置:

set HTTP_PROXY=http://domain\\\\username:password@proxy-host:port
set HTTPS_PROXY=http://domain\\\\username:password@proxy-host:port
set NO_PROXY=localhost,127.0.0.1,your-internal-domains.com

cd C:/Testing
npm test -- Jenkins

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:51