问题描述
在 Jenkins Pipeline 中,使用 Groovy 语言进行共享库的开发。从理论上讲,我们可以按照需求,开发我们想要的任何功能。但是,现实中总会遇到一些棘手的问题。比如这次遇到的 Dependency hell - 我们在共享库中,通过 Grape 引入我们需要的模块,这些模块又依赖于其他模块,然而这些模块与 Jenkins 正在使用的模块冲突。
比如,我们需要使用 [[https://github.com/ThStock/docker-java-parser|ThStock/docker-java-parser]] 模块解析 Dockerfile 文件,以检查其是否符合我们的规范。但是 [[https://github.com/ThStock/docker-java-parser|ThStock/docker-java-parser]] 模块需要 commons-lang 3.5 模块,而 Jenkins 使用 commons-lang 2.6 版本。这便是冲突。
该笔记将记录:如何解决 Jenkins Pipeline 共享库的依赖问题,以及相关问题处理。
注意事项
在多数 常规的 自动化场景中,不会遇到该问题,只是我们的需求太特殊了,需要解决这个问题。
解决方案
方案一、通过脚本实现
既然存在冲突,导致部分任务我们无法通过 Pipeline 共享库实现,那么我们可以编写自定义脚本来实现(比如通过 python 脚本实现某个极度复杂的统计功能),然后在 Pipeline 中执行该脚本。
现在,我们还需要将该脚本保存到 Pipeline 共享库中,作为共享库的组件,与其他用户分享,毕竟这个脚本也是共享库的一部分。根据目前(02/20/2021)的共享库的要求,只能保存在 resources/ 目录中。现在的问题就是:我们如何执行 resources/ 目录中的脚本
在 Jenkins Pipeline 中,可以在共享库的 resources/ 目录中

本文探讨了在Jenkins Pipeline中使用Groovy开发共享库时遇到的依赖冲突问题,特别是ThStock/docker-java-parser模块与Jenkins内置版本的矛盾。作者提供了三种解决方案:脚本执行、计算资源路径和自定义类加载器。
最低0.47元/天 解锁文章
2046

被折叠的 条评论
为什么被折叠?



