Выполнение команды Groovy из Jenkins с помощью Groovy script плагина

Я хочу заставить следующий сценарий в Дженкинсе:

  • У меня есть работа A и работа B
  • Я хочу отключить задание A, когда выполняется задание B, и после выполнения задания B я хочу снова включить задание A.

Чтобы включить/отключить задание A, я использовал плагин Groovy: Groovy плагин

Groovy плагин предлагает две возможности: Выполнить Groovy script и Выполнить систему Groovy script.

Я добавил следующие фрагменты кода в начале выполнения задания B:

Jenkins.instance.getItem("job_A").disable()

и после выполнения задания B:

Jenkins.instance.getItem("job_A").enable()

Использование Выполнить Groovy script:

Когда я запустил задание B, он вышел из строя со следующим исключением:

Caught: groovy.lang.MissingPropertyException: No such property: Jenkins for class: hudson7198966217090520732
    at hudson7198966217090520732.run(hudson7198966217090520732.groovy:1)

Использование Выполнить систему Groovy script:

Когда я запустил задание B, он вышел из строя со следующим исключением:

FATAL: No such property: Jenkins for class: Script1
groovy.lang.MissingPropertyException: No such property: Jenkins for class: Script1
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231)
    at Script1.run(Script1.groovy:1)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:682)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:666)
    at hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:80)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)
    at hudson.model.Build$BuildExecution.build(Build.java:199)
    at hudson.model.Build$BuildExecution.doRun(Build.java:160)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:586)
    at hudson.model.Run.execute(Run.java:1576)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:241)

Любая идея, в чем проблема? Кроме того, при выполнении этих фрагментов кода из Jenkins Script Console он работает без каких-либо проблем. Спасибо заранее.

Ответ 1

Для будущих читателей комментарий Тима выше - это решение:

import jenkins.model.Jenkins

Ответ 2

Я думаю, что если вы запустите System Groovy Script, объекты Jenkins будут доступны по умолчанию. Вы используете Groovy script. Следовательно, необходимо импортировать пакеты/классы.

Ответ 3

Я столкнулся с той же проблемой "не удалось разрешить класс jenkins.model.Jenkins", как прокомментировал @iloveretards, пока не понял, что пытался использовать шаг сборки "Выполнить скрипт Groovy". После перехода к шагу сборки "Выполнить системный скрипт Groovy" это на самом деле работало так, как задумано:

import jenkins.model.Jenkins
Jenkins.instance.getItem("job-name").disable()