每个部分涵盖了从之前的 LTS 版本升级,2.277.1 的部分涵盖了自 2.63.4 以来的升级。
Jenkins 插件中一个反复出现的安全问题是在表单提交端点上缺乏跨站点请求伪造(CSRF)保护。
Jenkins 2.277.2 和2.287 中的安全性增强通过导致结构化表单提交(对 StaplerRequest#getSubmittedForm
的调用)失败而解决了其中一些问题,除非请求的 HTTP 动作为 POST(CSRF保护有效的要求) 。
这将阻止 GET 请求能够将 JSON 表单提交(通常在 Jenkins 中使用)作为 ?form
查询参数提交。
可以通过设置 Java 系统属性 org.kohsuke.stapler.RequestImpl.ALLOWED_HTTP_VERBS_FOR_FORMS
来配置此附加保护措施。
它接受逗号分隔的 HTTP 请求动作列表,这些请求允许提供结构化表单提交。
默认值为 POST
。
设置这个系统属性为 GET,POST
将运行 GET
请求提供结构化的表单提交。
不鼓励这样做。
受影响的组件应该通过使用 @POST
注释 Web 方法来显式地要求 POST
请求,并配置它们提供的 HTML 表单以使用 <form … method="POST">
,并且客户端应提交 POST
请求。
从配置表中的 HTML table
布局过渡到 HTML div
布局需要对某些插件进行更改以实现兼容性。
升级到 Jenkins 2.277.1 时,Jenkins 管理员应更新已安装的插件。
一些较旧的插件版本将导致 Jenkins 的“配置系统”页面无法保存。
其他较早的插件版本将报告 Java 运行时异常,直到将它们更新为最新版本为止。
升级到 Jenkins 2.277.1 之后,请使用插件管理器立即更新受配置形式现代化影响的插件。
从 table 布局到 div 布局的更改可能需要更新私有维护的插件。 插件维护者应参考 table 到 div 布局迁移指南。 table 到 div 仪表盘提供与此用户界面改进相关的问题的状态。 |
Jenkins 2.277.1 已用 Spring Security 库替换了过时的 Acegi Security 库。
最受欢迎的插件已经根据需要进行了更新,以支持此更改。
对于 Acegi Security 中定义的过时类型,某些较早的插件版本可能会报告 NoClassDefFoundError
。
其他较早的插件版本将报告 Java 运行时异常,例如 NoSuchMethodError
或 AccessDeniedException2
,直到它们更新到最新版本为止。
有关特定插件的问题,请参考 Spring Security 兼容性表。
在升级到 Jenkins 2.277.1 之前,请使用插件管理器来更新受 Spring Security 更新影响的插件。
私有维护的插件可能需要更改才能适应从 Acegi Security 到 Spring Security 的更改。 参考 Jesse Glick 的 Spring Security 博客文章获取更多详细信息。 |
Jenkins 2.277.1 已经用最新发布的官方 XStream 库替换了它过时的 XStream XML 序列化库分支。
最受欢迎的插件已经根据需要进行了更新,以支持此更改。
一些较旧的插件版本可能会报告 NoSuchMethodError
。
其他较旧的插件版本可能无法解释现有设置,或者可能以与 XStrea m更新之前使用的格式不同的格式写入其设置。
有关特定插件的问题,请参考 XStream 兼容性表。
在升级到 Jenkins 2.277.1 之前,请使用插件管理器来更新受 XStream 更新影响的插件。
私人维护的插件可能需要更改才能适应从 Jenkins XStream fork 到官方 XStream 库的更改。 参考 Jesse Glick 的 XStream unfork 博客文章获取更多详细信息。 |
Jenkins 2.277.1 更新了 ASM Java 字节码操作和分析框架,该链接用于许多插件中的字节码处理。
此更新影响依赖于 ASM 进行字节码处理的插件。
一些较早的插件版本可能会报告 RuntimeException
,并显示消息“创建扩展的解析器类出错”(例如 Token Macro 插件)。
其他较旧的插件版本可能无法解释现有设置(例如 电子邮件扩展插件)。
升级到 Jenkins 2.277.1 后,使用插件管理器来更新受 ASM 更新影响的插件。
某些关键的 Jenkins 功能最初是在 Jenkins 核心内部创建的。 随着 Jenkins 的进一步发展,功能已从 Jenkins 内核内部转移到专用的 Jenkins 插件,例如 CVS 插件。 创建这些插件时,将这些插件“捆绑”在 jenkins.war 文件中,以保留与依赖于其功能的插件在 Jenkins 核心中的兼容性。 Jenkins 项目不再发布任何需要“捆绑” CVS 插件版本的插件。 CVS 插件不再与 Jenkins 捆绑在一起。
在极少数情况下,尝试在 1.340 之前尝试安装与 Jenkins(当时为 Hudson)兼容的插件时,可能会导致问题。
如果使用依赖于 CVS 插件提供的功能的插件并在 Jenkins 插件管理器之外管理插件,则现在需要确保自己已安装了最新版本的 CVS 插件。
Jenkins 将尝试加载此类插件,但可能会在启动过程中或之后的任何时候因 ClassNotFoundException
或类似情况而失败。
在这些情况下,最好的解决方法通常是修改有问题的插件,以便它需要更新版本的 Jenkins 内核。