TestRail UI脚本无法发送GET/POST请求对接Jenkins求助
解决TestRail UI脚本调用Jenkins接口的CSP跨域问题
问题核心
你遇到的报错本质是TestRail的Content Security Policy (CSP) 限制了脚本的请求范围——TestRail默认的connect-src规则只允许向自身域名和Pendo相关服务发请求,浏览器会直接拦截指向Jenkins的请求,根本不会触发Jenkins的CORS校验,所以你在Jenkins里配置的CORS规则暂时起不到作用。
可行解决方案
方案1:使用TestRail内置API代理(推荐)
TestRail提供了官方的API代理功能,允许UI脚本通过TestRail自身转发请求到外部服务,完美绕过CSP限制。修改你的请求代码如下:
$(myButton).click(function() { const authToken = btoa(`${JENKINS_USERNAME}:${JENKINS_USER_API_KEY}`); // 用TestRail代理转发Jenkins请求,需对Jenkins URL做URL编码 const proxyUrl = `/index.php?/api/v2/proxy?url=${encodeURIComponent(`https://${JENKINS_URL}crumbIssuer/api/json`)}`; $.ajax({ url: proxyUrl, dataType: "json", type: "GET", headers: { "Authorization": "Basic " + authToken }, success: function(data) { App.Dialogs.message('GET请求已发送!', '确认'); console.log(data); }, error: function() { console.error('获取crumb失败'); App.Dialogs.message('获取crumb时出错,请查看控制台日志获取详情', '错误'); } }); return false; });
这个方案无需修改任何服务器配置,完全符合TestRail的扩展规范,也是官方示例的标准实现方式。
方案2:修改TestRail的CSP配置(仅自托管版可用)
如果你使用的是自托管TestRail,可以通过修改Web服务器配置,将Jenkins域名加入TestRail的CSP规则:
- 找到TestRail对应Web服务器的配置文件(如Nginx的
nginx.conf、Apache的httpd.conf) - 更新CSP响应头的
connect-src指令,添加你的Jenkins域名:Content-Security-Policy: connect-src 'self' https://app.pendo.io https://data.pendo.io https://pendo-static-*.storage.googleapis.com https://你的Jenkins域名; - 重启Web服务器使配置生效
注意:云托管版TestRail无法修改CSP规则,只能使用方案1。
补充:Jenkins CORS配置校验
你当前的Jenkins CORS配置逻辑没问题,但要确保Access-Control-Allow-Origins中的TestRail域名是完整且准确的(包含协议、域名、端口,例如https://your-testrail-instance.com)。该配置只有在你通过方案2绕开TestRail的CSP限制后,才会实际生效。
内容的提问来源于stack exchange,提问作者Liam Goss
相关产品推荐
相关产品推荐

