Jenkins CORS 过滤器插件未添加 Access-Control-Allow-Origins 标头

Posted

技术标签:

【中文标题】Jenkins CORS 过滤器插件未添加 Access-Control-Allow-Origins 标头【英文标题】:Jenkins CORS Filter plugin not adding Access-Control-Allow-Origins header 【发布时间】:2019-11-19 14:00:26 【问题描述】:

我正在尝试将 CORS 支持添加到我的 Jenkins 服务器,以便我可以从浏览器访问 REST API。环顾四周,推荐的方法是使用CORS Filter plugin。

我已经安装它,启用它,并将http://localhost 添加到Access-Control-Allow-Origins 字段,以及将GET 添加到Access-Control-Allow-Methods 字段。但是,这些标头没有显示在我的请求中。

这个插件几年没有更新了,所以我不确定它是否与最新版本的Jenkins兼容。我正在运行版本 2.172。

在 Jenkins 系统日志中,我看到这些错误,不确定是否相关/相关

Caught exception evaluating: descriptor.getPropertyType(instance,field).itemTypeDescriptorOrDie in /configure. Reason: java.lang.reflect.InvocationTargetException
java.lang.AssertionError: class hudson.ivy.IvyBuildTrigger$IvyConfiguration is missing its descriptor in public hudson.ivy.IvyBuildTrigger$IvyConfiguration[] hudson.ivy.IvyBuildTrigger$DescriptorImpl.getConfigurations(). See https://jenkins.io/redirect/developer/class-is-missing-descriptor
Caught exception evaluating: h.filterDescriptors(it,attrs.descriptors) in /configure. Reason: java.lang.NullPointerException: Descriptor list is null for context 'class hudson.model.Hudson' in thread 'Handling GET /configure from 100.71.26.18 : qtp589873731-14 Jenkins/configure.jelly GlobalLibraries/config.jelly LibraryConfiguration/config.jelly SCMRetriever/DescriptorImpl/config.jelly MultiSCM/DescriptorImpl/config.jelly'
java.lang.NullPointerException: Descriptor list is null for context 'class hudson.model.Hudson' in thread 'Handling GET /configure from 100.71.26.18 : qtp589873731-14 Jenkins/configure.jelly GlobalLibraries/config.jelly LibraryConfiguration/config.jelly SCMRetriever/DescriptorImpl/config.jelly MultiSCM/DescriptorImpl/config.jelly'

这些错误的堆栈跟踪中有at org.jenkinsci.plugins.corsfilter.AccessControlsFilter.doFilter(AccessControlsFilter.java:79)

有人知道为 Jenkins REST API 启用 CORS 支持的好方法吗?

【问题讨论】:

【参考方案1】:

Jenkins 版本 2.303,我也遇到了同样的问题。我建议您在插件设置中定义的 localhost URI 上添加端口号,即使我很确定这不会改变任何东西。 实际上插件似乎完全没有效果。

可能最好的解决方案是设置您自己的代理来处理 CORS。这是一个很好的文档示例Build a Node.js Proxy Server in Under 10 minutes!

【讨论】:

以上是关于Jenkins CORS 过滤器插件未添加 Access-Control-Allow-Origins 标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jenkins 中的 Kubernetes 插件未进行卷挂载

Jenkins SSH 插件/SSH 代理插件:异常:超时:未建立套接字

Jenkins - 插件管理

Jenkins配置git/github 插件的ssh key

简析Jenkins的SVN插件未更新到最新代码

Jenkins Perforce 插件未从 Perforce 签出代码