升级到Jenkins LTS 2.19.x

每个部分涵盖了从之前的LTS版本升级,2.19.1的部分涵盖了从2.7.4升级。

升级到 Jenkins LTS 2.19.4

JNLP代理协议选项未正确保存

Jenkins重新启动后,无法从磁盘加载JNLP代理程序协议配置。

如果您自2.19.1开始自定义这些设置,请检查它们是否按预期配置。

Honor jenkins.model.Jenkins.slaveAgentPort again

Jenkins 2.0中的回归使Jenkins忽略了系统属性 jenkins.model.Jenkins.slaveAgentPort.

之前的行为已被恢复,并且添加有一个新的System属性 jenkins.model.Jenkins.slaveAgentPort,如果设置,将在每个Jenkins启动时强制执行JNLP代理端口,并且不允许通过UI更改该值。

为了进行故障排除,它仍然可以通过Groovy脚本进行更改,但任何更改都将在启动时恢复。

配置屏幕上的文本框将不再延伸以适应长行

如果用户不插入额外换行符来打破长行,则作业配置屏幕的布局将不再中断。 相反,文本框将允许水平滚动。

不要在代理构建历史页面上产生大量线程

特定代理的构建历史很久以来就导致了许多可能长期运行的线程产生。 这已被修复。

仪表板上的内存泄漏已修复

仪表板(查看页面)上的内存泄漏已修复,因此浏览器内存使用将不再增长无限。

升级到 Jenkins LTS 2.19.3

序列化黑名单的扩展

安全修补程序的主要部分是用于远程处理(Jenkins CLI和主/从代理通信)和XStream(XML配置和数据文件)的序列化黑名单的扩展。

黑名单软件包中类的合法使用将不再有效。 日志中的异常消息中会显示以下任何信息:

Rejected: com.sun.jndi.rmi.EvilClass
Refusing to unmarshal com.sun.jndi.rmi.EvilClass for security reasons
Refusing to marshal com.sun.jndi.rmi.EvilClass for security reasons

在这些示例中, com.sun.jndi.rmi.EvilClass 是一个真正的类名的占位符。

通过为 Jenkins 主机 java`调用设置 `hudson.remoting.ClassFilter.DEFAULTS_OVERRIDE_LOCATION 系统属性,可以自定义使用的黑名单 。 预计将设置为包含完整的自定义黑名单的文件的路径,覆盖默认的黑名单。

ClassFilter.java in the remoting component中定义了默认的黑名单。 在用于`hudson.remoting.ClassFilter.DEFAULTS_OVERRIDE_LOCATION`的配置文件中, 默认的黑名单将如下所示:

^bsh[.].*
^com[.]google[.]inject[.].*
^com[.]mchange[.]v2[.]c3p0[.].*
^com[.]sun[.]jndi[.].*
^com[.]sun[.]corba[.].*
^com[.]sun[.]javafx[.].*
^com[.]sun[.]org[.]apache[.]regex[.]internal[.].*
^java[.]awt[.].*
^java[.]rmi[.].*
^javax[.]management[.].*
^javax[.]naming[.].*
^javax[.]script[.].*
^javax[.]swing[.].*
^org[.]apache[.]commons[.]beanutils[.].*
^org[.]apache[.]commons[.]collections[.]functors[.].*
^org[.]apache[.]myfaces[.].*
^org[.]apache[.]wicket[.].*
.*org[.]apache[.]xalan.*
^org[.]codehaus[.]groovy[.]runtime[.].*
^org[.]hibernate[.].*
^org[.]python[.].*
^org[.]springframework[.](?!(\p{Alnum}+[.])*\p{Alnum}*Exception$).*
^sun[.]rmi[.].*

要检查是否有任何给定的类名被列入黑名单,请在 _Manage Jenkins » Script Console_中运行以下命令,用要检查的类名替换 com.sun.jndi.rmi.EvilClass :

hudson.remoting.ClassFilter.DEFAULT.isBlacklisted('com.sun.jndi.rmi.EvilClass')

删除或放宽黑名单上的条目必须小心谨慎,以免让自己暴露于已知的漏洞攻击。 可能的替代方案可能是通过HTTP和JNLP代理端口禁用CLI(请参见下文)以防止未经身份验证的使用。

禁用 CLI

Jenkins 2.19.3中的另一个变化是通过将系统属性`jenkins.CLI.disabled` 设置为 `true`来禁用通过HTTP的CLI和JNLP的新功能。这是一个更方便的选择来运行 Groovy script provided as a workaround to SECURITY-218 and SECURITY-360 ,对于那些不希望允许对Jenkins CLI进行未经身份验证访问的用户,即使是安全修补程序也是如此。 虽然CLI也可以使用Jenkins集成的SSH守护进程来使用,但这需要身份验证,所以它不是未经身份验证的攻击的载体。 要禁用此功能,请在 _Manage Jenkins » Configure Jenkins » SSH Server_中禁用SSH服务器端口。

升级到 Jenkins LTS 2.19.2

修复通过HTTP的CLI

HTTP上的CLI(禁用JNLP端口时)现在可以与CSRF保护一起使用,并且不需要明确设置+hudson.diyChunking+。 因此,现在可以恢复应用于以前版本的Jenkins以使CLI工作的任何解决方法。

升级到 Jenkins LTS 2.19.1

插件依赖关系解决修复

以前的版本允许Jenkins以无效的插件配置运行。 例如,即使这些依赖关系过时或禁用,依赖于其他插件的插件也会被加载。 这可能会导致在运行时很难调试错误。

现在,Jenkins将拒绝加载依赖性不足的插件。 解释此问题的诊断信息将在启动过程中写入Jenkins日志,我们强烈建议在升级后监控该日志。

表单自动完成已禁用

使用JavaScript的配置表单长期存在的问题是提交表单,然后使用Web浏览器“返回”按钮返回表单,导致表单内容错误。 再次提交表单会导致意外损坏的配置。

要解决此问题,我们禁用了几乎所有表单字段的自动完成功能。

安全配置中的代理协议选择

“配置全局安全性”表单现在包含启用/禁用特定代理协议版本的选项,以及每种协议的简短说明。 关于何时自定义特定协议的状态没有一般指导,但将来可能需要。

隐藏Java Web Start启动器

默认情况下,新的Jenkins 2实例将禁用JNLP代理端口。 由于这是建立代理工作的JNLP Web Start启动方法的要求,所以如果端口被禁用,则此表单选项将被隐藏。 要显示它,只需在全局安全配置中启用JNLP代理端口即可。