从低版本的Jenkins升级到高版本,特别是LTS版本低于2.138.4升级到高于LTS版本2.164.1的情况,就可能出现界面中英文混合的情况,而且通过安装localization-zh-cn插件都无法解决,如下所示:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Ntb290aDAw,size_16,color_FFFFFF,t_70


经过反复的降级和升级,并按官网的LTS升级说明进行升级,也没能解决这个问题,直到对插件目录plugins进行替换操作,才发现一堆旧版本的插件才是导致这个问题的罪魁祸首,至于是哪个插件我们也没法去详细追究(因为太多插件了)。


解决方案有两种

一种是主动降LTS版本,降到之前能显示中文的低版本或更早版本,就能正常显示中文(但是这方案治标不治本);

另一种方案是一种迂回的方案,就是选择另一台机器,先安装最新版本的Jenkins(下载地址:https://jenkins.io/download/)

image.png


比如看到的右侧显示最新版本是2.168,左侧显示最新的LTS版本是2.164.1,我们可以直接选择下载安装最新LTS的2.164.1版本,是以完整包的模式进行安装,安装后还需要选择安装所有常用插件。这样我们得到plugins目录插件就相对完整(而且都是标准版本的插件,干净未被污染的插件)。


然后把最新版本的plugins目录覆盖到旧版本的jenkins目录下(覆盖前做好目录备份,以便出现问题时能够及时回滚,一般备份好plugins目录和config.xml文件,以防万一再把users目录也备份一下)。


替换完最新版本的plugins目录后,我们就可以把jenkins.war包也替换成最新的2.164.1版本,然后启动jenkins服务,这时候进入首页面应该就能看到完整的中文界面了:

image.png

如果出现登录提示用户名或密码不正确,可以考虑把我们备份的users目录替换回去(因为新版本的user文件格式会有变化,可能导致token授权问题)。


剩下的遗留问题就是插件的版本问题了,一般常用插件都不多,我们检查一下系统管理的各项配置,看看有没有问题需要调整的,如果没有就恭喜你升级成功了。


为了确保所有插件不出现依赖问题或严重错误(如邮件发送),我们可能需要对插件进行一次纠正,第一步是将插件版本降级到上一版本(选择按钮【降到】,当然降级前我们也要备份一下plugins文件夹以防万一):

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Ntb290aDAw,size_16,color_FFFFFF,t_70

降级成功后,重启jenkins,然后看插件的警告,记住只要是依赖错误的插件我们都要想办法处理和纠正,处理的方式包括升级或是卸载后重装。


watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Ntb290aDAw,size_16,color_FFFFFF,t_70

如果是像上面那样提示failed to load的 ,说明就要想办法卸载了,而且是可能自动卸载不掉的,我们就需要停止jenkins服务,手动删除plugins目录下的指定插件文件(同名下的文件,如Pipeline全删除),然后启动服务重新下载这个插件。纠正完依赖错误后,我们的插件就能完全满足最新版本的jenkins了,这时候再检查一下相关配置,有些相关插件比如邮件的SMTP服务和账号密码可能会因为插件的更新而丢失,需要重新配置一下。


总结:Jenkins的更新,只要保证配置文件,users和Jobs、workspace等历史数据的完整性,就不会丢失我们的重要历史数据,所以无论如何降级和升级都不会带来灾难性的问题,在开源系统中属于更新升级分险很小的了。


补充说明:正常情况下,中文失效后,按照官网的说明安装插件localization-zh-cn,并在系统设置中配置中文Locale(Default Language=zh_CN)就应该能解决。如果不能解决,一般就是升级过程中,插件出现了依赖包失效或部分插件加载失败的情况,间接导致localization-zh-cn插件因为依赖关系而不起作用。


上面说就是太麻烦了,或者下载中文插件试试

下载并启用插件:localization-zh-cn-plugin

在jenkins的插件管理页面,在可用插件搜索:localization-zh-cn 。就可以安装这个插件,然后重启jenkins服务,然后就解决问题了。