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
相关产品推荐
相关产品推荐

