如何将 Jenkins Ivy 项目转换为 Freestyle 项目?
How can a Jenkins Ivy Project be converted to a Freestyle Project?
最近更新(Jenkins 和插件)后,由于布局不兼容,我的 Ivy 项目设置无法再更改(table to div change 在次要版本更新中,从 Jenkins 2.263 到 2.264)。这破坏了配置项目中涉及的每个插件,但两个月都没有引起注意,因为我们的项目设置在很长一段时间内不需要更改,并且构建在此期间仍然运行良好。
供参考,我的构建过程基于:
- 用于构建的 Ant
- Ivy 解决依赖关系
- Artifactory 作为依赖库
- Subversion 作为代码存储库(使用 Jenkins 提交触发器)
- Junit 与 Cobertura、Jmeter
- FindBugs、CheckStyle、CLOC
- 项目基于 Java 和 JavaDoc
我尝试恢复到 Jenkins 的早期版本,但这几乎影响了每个插件,而且我无法成功恢复到中断更新之前的插件版本组合。在恢复更新失败后,我决定继续更新我们所有的 68 个项目以适应新的插件版本。
很遗憾,我无法将任何配置更改保存到 Ivy Projects。经过反复试验,我发现我可以使用 Freestyle Projects 重新生成我的构建。但是,詹金斯似乎没有提供任何方法将项目从一种类型转换为另一种类型。如果我要从头开始创建新项目来替换我现有的项目(全部 68 个,包括它们的依赖项和特定的插件设置),我将丢失我以前的所有构建历史,包括构建号(它会转移到我们的部署中)和我们的项目指标(我们用于绩效评估)。所以,我不想丢失所有这些信息。
如何手动将 Ivy 项目更改为 Freestyle 项目?
我找到了 partial solution,但它似乎并不适用于所有项目。
- 停止 Jenkins webapp(重要)。
- 对于每个要转换为自由式项目的 Ivy 项目,将
jobs/[project]/config.xml
的根元素从 <hudson.ivy.IvyModuleSet plugin="ivy@2.1">
重命名为 <project>
(不要忘记也更改文档末尾的结束标记从 </hudson.ivy.IvyModuleSet>
到 </project>
.
- 重启 Jenkins。
对于大多数项目,我可以更改项目配置并保存(重要的是,Ant/Ivy-Artifactory Integration
在 Freestyle 项目中是 Ivy 项目的功能匹配替代品)。
但是,其他三个项目在更改根元素标签后仍然显示为常春藤项目。这些项目的共同点是它们都使用 Performance Plugin。为了完成将这些转换为 Freestyle,我还需要:
- 禁用性能插件
- 重启詹金斯
- Edit/Save 上述项目的配置。
副作用和特殊注意事项:
- 我所有的构建时间戳(更改之前)现在列为
Dec 31, 1969 7:00 PM EDT
,最近的构建时间为 50 yr
。新的构建时间戳是正确的。这可能是不再依赖 CloudBees 插件构建管道的结果,mapped build timestamps to build versions 避免了旧的回归错误。
- 每个项目在仪表板上立即变为红色(失败),即使更新后没有尝试构建,之前的状态是蓝色(成功)或黄色(不稳定)。我怀疑这与上述问题有关。在下一次尝试构建之后,无论成功与否,状态都会准确反映构建状态。
- 无法使用性能插件。
- 现在有几个项目同时显示为上游和下游项目,导致无休止的构建周期。共有三种情况涉及不同的项目组合,在这些情况下,需要从构建触发器中删除一个或两个项目。我怀疑这种情况已经有一段时间了,但由于某种原因,无限循环只在更新后发生。
- 我的所有 Jenkins 项目突然出现大量“无法读取的数据”。不幸的是,丢弃它是一个孤注一掷的过程(不能选择一个项目来测试)。我备份了我的工作目录并单击了放弃,令我惊讶的是一切仍然有效。
看来我又回来了。我的内部版本号已被保留,唯一明显的副作用是 50 年前的内部版本。如果我遇到这些更改导致的任何其他问题,我将更新此答案。
最近更新(Jenkins 和插件)后,由于布局不兼容,我的 Ivy 项目设置无法再更改(table to div change 在次要版本更新中,从 Jenkins 2.263 到 2.264)。这破坏了配置项目中涉及的每个插件,但两个月都没有引起注意,因为我们的项目设置在很长一段时间内不需要更改,并且构建在此期间仍然运行良好。
供参考,我的构建过程基于:
- 用于构建的 Ant
- Ivy 解决依赖关系
- Artifactory 作为依赖库
- Subversion 作为代码存储库(使用 Jenkins 提交触发器)
- Junit 与 Cobertura、Jmeter
- FindBugs、CheckStyle、CLOC
- 项目基于 Java 和 JavaDoc
我尝试恢复到 Jenkins 的早期版本,但这几乎影响了每个插件,而且我无法成功恢复到中断更新之前的插件版本组合。在恢复更新失败后,我决定继续更新我们所有的 68 个项目以适应新的插件版本。
很遗憾,我无法将任何配置更改保存到 Ivy Projects。经过反复试验,我发现我可以使用 Freestyle Projects 重新生成我的构建。但是,詹金斯似乎没有提供任何方法将项目从一种类型转换为另一种类型。如果我要从头开始创建新项目来替换我现有的项目(全部 68 个,包括它们的依赖项和特定的插件设置),我将丢失我以前的所有构建历史,包括构建号(它会转移到我们的部署中)和我们的项目指标(我们用于绩效评估)。所以,我不想丢失所有这些信息。
如何手动将 Ivy 项目更改为 Freestyle 项目?
我找到了 partial solution,但它似乎并不适用于所有项目。
- 停止 Jenkins webapp(重要)。
- 对于每个要转换为自由式项目的 Ivy 项目,将
jobs/[project]/config.xml
的根元素从<hudson.ivy.IvyModuleSet plugin="ivy@2.1">
重命名为<project>
(不要忘记也更改文档末尾的结束标记从</hudson.ivy.IvyModuleSet>
到</project>
. - 重启 Jenkins。
对于大多数项目,我可以更改项目配置并保存(重要的是,Ant/Ivy-Artifactory Integration
在 Freestyle 项目中是 Ivy 项目的功能匹配替代品)。
但是,其他三个项目在更改根元素标签后仍然显示为常春藤项目。这些项目的共同点是它们都使用 Performance Plugin。为了完成将这些转换为 Freestyle,我还需要:
- 禁用性能插件
- 重启詹金斯
- Edit/Save 上述项目的配置。
副作用和特殊注意事项:
- 我所有的构建时间戳(更改之前)现在列为
Dec 31, 1969 7:00 PM EDT
,最近的构建时间为50 yr
。新的构建时间戳是正确的。这可能是不再依赖 CloudBees 插件构建管道的结果,mapped build timestamps to build versions 避免了旧的回归错误。 - 每个项目在仪表板上立即变为红色(失败),即使更新后没有尝试构建,之前的状态是蓝色(成功)或黄色(不稳定)。我怀疑这与上述问题有关。在下一次尝试构建之后,无论成功与否,状态都会准确反映构建状态。
- 无法使用性能插件。
- 现在有几个项目同时显示为上游和下游项目,导致无休止的构建周期。共有三种情况涉及不同的项目组合,在这些情况下,需要从构建触发器中删除一个或两个项目。我怀疑这种情况已经有一段时间了,但由于某种原因,无限循环只在更新后发生。
- 我的所有 Jenkins 项目突然出现大量“无法读取的数据”。不幸的是,丢弃它是一个孤注一掷的过程(不能选择一个项目来测试)。我备份了我的工作目录并单击了放弃,令我惊讶的是一切仍然有效。
看来我又回来了。我的内部版本号已被保留,唯一明显的副作用是 50 年前的内部版本。如果我遇到这些更改导致的任何其他问题,我将更新此答案。