如何使用 JenkinsPipelineUnit 模拟自定义步骤?
How to mock a custom step using JenkinsPipelineUnit?
我正在使用 JenkinsPipelineUnit 来测试管道。我定义了一个自定义步骤,如下所示:
// vars/getOnlineNodes.groovy
import jenkins.model.Jenkins
def call() {
Jenkins.get().nodes
.findAll { it.toComputer().isOnline() }
.collect { it.selfLabel.name }
}
并在我的测试中模拟它:
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
但是它抛出一个异常java.lang.NoClassDefFoundError: javax/servlet/ServletException
。我应该如何正确执行此操作?
我找到了解决这个问题的方法 here。基本上,如果您在 运行 脚本之前模拟您的自定义步骤(函数),它将覆盖模拟,因为在调用 runScript('my-script.jenkins')
:
时将加载库
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
runScript('my-script.jenkins')
你应该做的是加载脚本,然后模拟步骤,然后 运行 脚本,就像这样:
def script = loadScript('my-script.jenkins')
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
script.run()
我正在使用 JenkinsPipelineUnit 来测试管道。我定义了一个自定义步骤,如下所示:
// vars/getOnlineNodes.groovy
import jenkins.model.Jenkins
def call() {
Jenkins.get().nodes
.findAll { it.toComputer().isOnline() }
.collect { it.selfLabel.name }
}
并在我的测试中模拟它:
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
但是它抛出一个异常java.lang.NoClassDefFoundError: javax/servlet/ServletException
。我应该如何正确执行此操作?
我找到了解决这个问题的方法 here。基本上,如果您在 运行 脚本之前模拟您的自定义步骤(函数),它将覆盖模拟,因为在调用 runScript('my-script.jenkins')
:
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
runScript('my-script.jenkins')
你应该做的是加载脚本,然后模拟步骤,然后 运行 脚本,就像这样:
def script = loadScript('my-script.jenkins')
helper.registerAllowedMethod('getOnlineNodes', [], { ['node1', 'node2', 'node3'] })
script.run()