1. 介绍
最近登录Jenkins之后,消息提示中反馈说:您的存储中有无法读取或者旧的数据格式。通过Jenkins的系统管理中的管理旧数据可以看到详细说明。
那么,问题来了。这些存储中有无法读取或者旧的数据格式是什么原因造成的呢?
2. 问题分析
Jenkins的所有功能,几乎可以说都是通过插件来实现的。而提示的这个错误原因,就是老版本插件安装过程中产生的配置文件中定义的变量在新版本插件中已经失效,无法读取了。
Jenkins就会提示出这个错误信息。
整个功能模块分两块:旧数据,不可读数据。
2.1 管理旧数据
当数据存储在磁盘上的方式发生变化时,Jenkins使用以下策略:数据在加载时迁移到新结构,但项/记录
不会以新格式重新保存。这允许在必要时降级詹金斯。但是,它也可以将数据无限期地保留在磁盘上。这个功能会列出了包含此类数据的项/记录,以及更改数据结构的Jenkins版本。
也就是说,我们可以通过这个界面看到哪些数据已经属于旧数据了。
类型 ↓ | 名称 | 版本 | Error |
---|---|---|---|
ps:我的项目中还没有产生旧数据,这里就不做展示了。
2.2 不可读数据
有时读取数据时会发生错误(如果一个插件添加了一些数据,但该插件后来被禁用了,如果迁移代码没有为结构更改编写,或者在Jenkins已经写入了旧版本不可读的数据后降级)。这些错误会被记录下来,但不可读的数据会被跳过,从而允许Jenkins启动并正常工作。
在这些项/记录中留下不可读的数据是可以的,因为Jenkins会简单地忽略它。为了避免Jenkins启动时的日志消息,您可以使用列表下面的按钮保存这些项目/记录,从而永久删除不可读的数据。
类型 ↓ | 名称 | Error |
---|---|---|
hudson.model.FreeStyleProject | Demo-Android | CannotResolveClassException: buildName, CannotResolveClassException: qrcodePath, CannotResolveClassException: envVarsPath |
例如,我因为插件升级,造成buildName,qrcodePath,envVarsPath 配置的全局变量不可读取了。
我们有两个选择:
- 丢弃掉不可读数据。
- 不管他。
因为Jenkins在构造过程中, 碰见不可读数据会自动忽略的。包括旧数据也是一样的。而这两个数据存在的主要原因就是,Jenkins为了保留插件降级功能。我们降级插件之后有些旧配置项就会生效了。
这里就是一个提醒功能。
PS:当我们整个配置全部稳定。构造任务都正常,不建议经常升级插件。原先我说建议插件用最新的,那只限于新版本安装,或者插件的确有比较大的功能更新,可以提高大家的效率的情况下。