INFO: 迁移用户 'admin' 从 'users/admin/' 到 'users/admin_6635238516816951048/'
每个部分涵盖了从之前的 LTS 版本升级,2.138.1 的部分涵盖了从 2.121.3 升级。
应用此升级后, Jenkins 将用户记录迁移到稍有不同的存储格式,该存储格式使用中央索引将用户 ID 映射到目录名称。
这是一个向前不兼容的更改, 因此较旧的 Jenkins 版本将无法处理新的存储格式。
强烈建议您在升级之前至少备份 $JENKINS_HOME/users/
目录。
如果 Jenkins 崩溃或在启动过程中被杀死, 则迁移可能不完整,可能使一部分用户记录不可用。
要确定是否属于这种情况,请检查 $JENKINS_HOME/users/users.xml
文件是否存在。
如果不存在,但是用户目录已按如下所述重命名,则迁移被中断。
在这种情况下,如果没有备份可用,我们建议检查 Jenkins 系统日志,并使用其中的信息将目录恢复为以前的名称。
日志条目看起来类似于以下消息:
INFO: 迁移用户 'admin' 从 'users/admin/' 到 'users/admin_6635238516816951048/'
在这种情况下,在 Jenkins 非运行状态下,将目录 $JENKINS_HOME/users/admin_6635238516816951048/
重命名为 $JENKINS_HOME/users/admin/
。
对日志中列出的所有其他用户目录重复此操作。
完成上述所有操作将撤消部分迁移。
Jenkins 将在下次启动时重新运行它。
如果更新后 Jenkins 需要降级并成功应用了用户目录迁移,请执行上述所有操作,并同时删除 $JENKINS_HOME/users/users.xml
文件。
这将还原迁移并将所有用户记录还原为与 Jenkins 2.138.3 及更早版本兼容的格式。
IMPORTANT: 请注意,降级 Jenkins 通常不受支持,并且可能由于与迁移无关的原因而失败。
Stapler web 框架中的一个设计缺陷允许通过访问特定 URLs 来访问原本不打算通过这种方式调用的字段和方法。 For further details, see the security advisory.
作为此安全修复的副作用,某些 HTTP 请求将不再像以前那样工作。
这通常会导致 HTTP 404 Not Found
响应,尽管一小部分请求将成功,但响应将与应用程序修复之前完全不同。
无论何时发生, Jnkins都会向Jenkins 系统日志中写入类似于以下内容的消息:
WARNING: New Stapler routing rules result in the URL "/example" no longer being allowed. If you consider it safe to use, add the following to the whitelist: "method hudson.model.Hudson doExample". Learn more: https://jenkins.io/redirect/stapler-routing
如果这是由于合法使用 Jenkins UI 造成的,则可以将受影响的签名添加到已批准的签名列表中。 为此,请以管理员身份在 Jenkins 脚本控制台中运行以下命令:
jenkins.security.stapler.StaticRoutingDecisionProvider.get().add('method hudson.model.Hudson doExample')
这将在 Jenkins 主目录中创建一个名为 stapler-whitelist.txt
的文件,并添加指定的条目。
也可以手动修改此文件,但如果 Jenkins已经在运行,则需要在应用任何更改后执行以下脚本:
jenkins.security.stapler.StaticRoutingDecisionProvider.get().reload()
我们在link中跟踪已知受影响的插件及其状态: the Jenkins wiki。
Jenkins 中的视图应用了一种安全性强化,以防止跨站点脚本漏洞被利用。 在极少数情况下,这会导致视图中某些内容转义两次(通常会导致可见的 HTML 实体)。
我们认为这些影响是插件的一个 bug ,要么选择跳过默认测试套件,要么使用过时的工具链。 我们在 the Jenkins wiki 上跟踪已知受影响的插件及其状态。
作为临时解决方法,可以通过将系统属性 org.kohsuke.stapler.jelly.CustomJellyContext.escapeByDefault
设置为 false
来禁用此强化。
第一次启动 Jenkins 2.138.2 ,如果插件 jobConfigHistory[Job Config History Plugin] 安装的是 2.19 之前的版本,则可能会记录如下警告。
Oct 10, 2018 2:27:17 PM hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1 error WARNING: Failed to instantiate Key[type=jenkins.telemetry.Correlator, annotation=[none]]; skipping this component com.google.inject.ProvisionException: Unable to provision, see the following errors: 1) Tried proxying jenkins.telemetry.Correlator to support a circular dependency, but it is not an interface.
这似乎不会导致进一步的问题。 Jenkins 的后续重新启动将不再记录此警告。
2.138.2 和 2.146 中的安全强化可能导致使用 github-oauth[GitHub OAuth Plugin] 插件访问任务时出现问题,由于插件的 bug 。
作为解决方法,可以通过将 Java system properties hudson.model.AbstractItem.skipPermissionCheck
和 hudson.model.Run.skipPermissionCheck
设置为 true
来暂时禁用部分安全强化。
请查看 description of SECURITY-595 in the 2018-12-05 security advisory 获取有关此解决方案的重要信息。 |
登陆和用户注册页面被重新设计。
作为副作用,现有的 PageDecorator
实现将不会在重新设计的页面上使用。
查看 announcement blog post 获取进一步信息。
允许访问 HTTP 远程 API 的用户API 令牌 已重新设计: API 令牌现在可以被创建和撤销,并以不可恢复的格式存储。
查看 announcement blog post 获取进一步信息。
已经禁用已弃用的 Jenkins CLI 协议 1 和 2 版本,以及 Java Web 启动代理协议的 1、 2 和 3 版本。
如果仍然使用这些协议(例如基于远程处理的CLI 或代理上的旧 slave.jar
文件),则需要在升级后重新启用这些协议,或升级客户端。
相同的建议 用于远程处理更改的 2.121.x 升级指南适用于此处。
从当前版本开始, Jenkins 需要 2.7 版本以上的 GNU C 库。 它使得一些 Linux 发行版不受支持,特别是 RHEL 5 和 CentOS 5 。 查看 JENKINS-53924 和 JENKINS-53832 获取更多信息。