Как смоделировать пользовательский шаг, используя JenkinsPipelineUnit? - PullRequest
0 голосов
/ 24 сентября 2018

Я использую 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.Как мне сделать это правильно?

1 Ответ

0 голосов
/ 24 сентября 2018

Я нашел решение для этого здесь .По сути, если вы смоделируете свой пользовательский шаг (функцию) перед запуском скрипта, он переопределит макет, потому что библиотека будет загружена при вызове 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()
...