web-dev-qa-db-fra.com

Exécution de la commande Groovy à partir de Jenkins à l'aide du plug-in de script Groovy

Je veux forcer le scénario suivant à Jenkins:

  1. J'ai le travail A et le travail B
  2. Je souhaite désactiver le travail A lorsque le travail B est exécuté et après l'exécution du travail B, je souhaite réactiver le travail A.

Pour activer/désactiver le travail A, j'ai utilisé Groovy plugin: Groovy plugin

Groovy plugin offre deux possibilités: Exécuter un script Groovy et Exécuter un script Groovy système .

J'ai ajouté les extraits de code suivants au début de l'exécution du travail B:

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

et après exécution du travail B:

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

Utilisation de Execute Groovy script :

Lorsque j'ai exécuté le travail B, il a échoué avec l'exception suivante:

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

Utilisation de Exécuter un script Groovy système :

Lorsque j'ai exécuté le travail B, il a échoué avec l'exception suivante:

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)

De plus, lors de l’exécution de ces extraits de code à partir de Jenkins Script Console, cela fonctionne sans aucun problème. Merci d’avance.

10
Bakir Jusufbegovic

Pour les futurs lecteurs, le commentaire de Tim ci-dessus est la solution:

import jenkins.model.Jenkins

27
agentgonzo

Je pense que si vous exécutez le script System Groovy, les objets Jenkins sont disponibles par défaut. Ce que vous exécutez est le script groovy. Par conséquent, il est nécessaire d'importer les packages/classes.

1
Vijay

J'ai rencontré le même problème "incapable de résoudre la classe jenkins.model.Jenkins" commenté par @iloveretards, jusqu'à ce que je réalise que j'avais essayé d'utiliser l'étape de construction "Exécuter le script Groovy". Après le passage à l'étape de construction "Exécuter le script Groovy du système", cela a fonctionné comme prévu:

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