哪个依赖库包含Jenkins Workflow基础Groovy函数?
问题描述
为自研Jenkins Groovy脚本编写JUnit测试时,待测脚本包含如下调用:
error "Foo"
在IntelliJ IDEA中运行测试时抛出异常:
No signature of method: static xxx.error() is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl) values [Foo]
此前尝试添加org.jenkins-ci.plugins.workflow:workflow-aggregator:2.5的Maven依赖未解决问题,无法定位存放Jenkins Workflow基础步骤(含error这类内置函数)的依赖库。
解决方法
error属于Pipeline基础步骤,对应依赖不是workflow-aggregator聚合包,需直接引入workflow-basic-steps依赖,测试场景下scope设为test即可:
<dependency> <groupId>org.jenkins-ci.plugins.workflow</groupId> <artifactId>workflow-basic-steps</artifactId> <version>选择与自身Jenkins环境兼容的版本即可,常用稳定版本如1178.v99d02c2a_10d6</version> <scope>test</scope> </dependency>
- 仅添加依赖无法彻底解决问题:
error这类Pipeline步骤不是静态方法,是绑定在Pipeline执行上下文里的步骤,直接以静态调用方式跑脚本,就算依赖齐全Groovy运行时也找不到方法。必须使用官方Pipeline单元测试框架JenkinsPipelineUnit模拟执行上下文。 - 测试初始化阶段需要注册
error步骤的模拟实现,示例代码如下:
// 测试基类setup阶段执行 helper.registerStep('error') { msg -> throw new hudson.AbortException(msg.toString()) }
这里参数不要写死为String类型,兼容GString传参场景,避免再次出现参数类型不匹配报错。
- 之前引入的
workflow-aggregator:2.5版本过旧,和新版JDK、单元测试框架存在兼容性问题,做单元测试时优先对齐JenkinsPipelineUnit的依赖版本,不要单独引入过旧的workflow组件,避免依赖冲突。
内容的提问来源于stack exchange,提问作者Andremoniy
相关产品推荐
相关产品推荐

