it-swarm.com.de

Ausführen des Groovy-Befehls von Jenkins mit dem Groovy-Skript-Plugin

Ich möchte folgendes Szenario in Jenkins erzwingen:

  1. Ich habe Job A und Job B
  2. Ich möchte Job A deaktivieren, wenn Job B ausgeführt wird, und nach Ausführung von Job B möchte ich Job A wieder aktivieren.

Zum Aktivieren/Deaktivieren von Job A habe ich das Groovy-Plugin verwendet: Groovy-Plugin

Groovy Plugin bietet zwei Möglichkeiten: Groovy-Skript ausführen und System Groovy-Skript ausführen .

Ich habe beim Start der Ausführung von Job B die folgenden Codeausschnitte hinzugefügt:

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

und nach Ausführung von Auftrag B:

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

Verwenden von Groovy-Skript ausführen :

Wenn ich Job B ausgeführt habe, schlägt er mit folgender Ausnahme fehl:

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

Verwenden von Führt das System Groovy-Skript aus :

Wenn ich Job B ausgeführt habe, schlägt er mit folgender Ausnahme fehl:

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)

Irgendeine Idee, was das Problem sein könnte? Wenn Sie diese Code-Schnipsel auch über die Jenkins Script Console ausführen, funktioniert das problemlos. Vielen Dank im Voraus.

10

Für zukünftige Leser ist Tims Kommentar die Lösung:

import jenkins.model.Jenkins

27
agentgonzo

Ich denke, wenn Sie das System Groovy Script ausführen, sind Jenkins-Objekte standardmäßig verfügbar. Was Sie ausführen, ist das groovige Skript. Daher müssen die Pakete/Klassen importiert werden.

1
Vijay

Ich stieß auf das gleiche Problem "Die Klasse jenkins.model.Jenkins konnte nicht aufgelöst werden", wie von @iloveretards kommentiert, bis mir klar wurde, dass ich versucht hatte, den Build-Schritt "Execute Groovy-Skript" zu verwenden. Nach dem Wechsel zum Build-Schritt "Execute system Groovy script" funktionierte dies tatsächlich wie beabsichtigt:

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