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

GitLab Runner代理下请求Sandbox URL失败,本地运行正常求助

GitLab Runner中Mocha代理请求失败的解决方案

1. 配置CI环境的代理变量

GitLab Runner执行环境不会自动继承本地代理设置,需在.gitlab-ci.yml中明确声明全局代理变量,注意变量名必须大写(多数工具仅识别大写代理变量):

variables:
  HTTP_PROXY: "http://你的代理服务器地址:端口"
  HTTPS_PROXY: "http://你的代理服务器地址:端口"
  NO_PROXY: "localhost,127.0.0.1,内部服务域名列表"

2. 验证Runner与代理的连通性

在CI脚本中添加前置检测命令,确认Runner所在网络能正常访问代理:

before_script:
  # 测试代理服务器可达性
  - ping -c 3 你的代理服务器地址
  # 通过代理测试目标接口连通性
  - curl -x $HTTP_PROXY https://你的目标接口地址 -I

如果检测失败,说明Runner网络无法访问代理,需联系运维调整网络策略。

3. 给请求库手动配置代理

部分HTTP请求库(如axios、request)不会自动读取系统代理变量,需在Mocha测试代码中显式配置:
以axios为例:

const axios = require('axios');
const proxyUrl = process.env.HTTP_PROXY;

// 解析代理地址和端口
const [proxyHost, proxyPort] = proxyUrl.split('://')[1].split(':');

const requestInstance = axios.create({
  proxy: {
    host: proxyHost,
    port: parseInt(proxyPort)
  }
});

// 使用配置好代理的实例发起请求
requestInstance.get('https://你的目标接口地址')
  .then(res => console.log(res.status))
  .catch(err => console.error(err));

4. 检查Runner执行用户的环境变量加载

GitLab Runner默认以gitlab-runner用户执行任务,该用户可能无法读取系统全局代理配置文件。可在CI脚本中手动加载代理配置:

before_script:
  # 加载系统代理配置文件(路径根据实际情况调整)
  - source /etc/profile.d/proxy.sh

5. 排除SSL证书校验问题

若请求HTTPS接口,代理可能存在证书信任问题(本地可能已跳过校验,但Runner环境默认开启)。测试环境下可临时禁用证书校验:

// 在测试代码开头添加
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

也可给请求库配置信任的证书(生产环境推荐):

const axios = require('axios');
const https = require('https');

const httpsAgent = new https.Agent({
  rejectUnauthorized: false,
  // 或指定信任的证书路径
  // ca: fs.readFileSync('/path/to/ca-cert.pem')
});

axios.get('https://你的目标接口地址', { httpsAgent });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:10:57