如何使用 JenkinsPipelineUnit 模拟自定义步骤?

Fuz*_*zzY 5 jenkins jenkins-pipeline jenkins-pipeline-unit

我正在使用JenkinsPipelineUnit来测试管道。我定义了一个自定义步骤,如下所示:

// vars/getOnlineNodes.groovy
import jenkins.model.Jenkins

def call() {
    Jenkins.get().nodes
            .findAll { it.toComputer().isOnline() }
            .collect { it.selfLabel.name }
}
Run Code Online (Sandbox Code Playgroud)

并在我的测试中模拟它:

helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
Run Code Online (Sandbox Code Playgroud)

但它抛出异常java.lang.NoClassDefFoundError: javax/servlet/ServletException。我应该如何正确地做到这一点?

Fuz*_*zzY 2

我在这里找到了解决方案。基本上,如果您在运行脚本之前模拟自定义步骤(函数),它将覆盖模拟,因为调用时将加载库runScript('my-script.jenkins')

helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
runScript('my-script.jenkins')
Run Code Online (Sandbox Code Playgroud)

您应该做的是加载脚本,然后模拟步骤,然后运行脚本,如下所示:

def script = loadScript('my-script.jenkins')
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
script.run()
Run Code Online (Sandbox Code Playgroud)