Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running Groovy command from Jenkins using Groovy script plugin

I want to force following scenario in Jenkins:

  1. I have job A and job B
  2. I want to disable job A when job B is executed, and after execution of job B, I want to enable job A again.

To enable/disable job A, I've used Groovy plugin: Groovy plugin

Groovy plugin offers two possibilities: Execute Groovy script and Execute system Groovy script.

I've added following code snippets on the start of execution of job B:

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

and after execution of job B:

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

Using Execute Groovy script:

When I ran job B, it fails with following exception:

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

Using Execute system Groovy script:

When I ran job B, it fails with following exception:

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)

Any idea what might be the problem? Also, when running this code snippets from Jenkins Script Console, it works without any issues. Thanks in advance.

like image 854
Bakir Jusufbegovic Avatar asked Jul 02 '13 15:07

Bakir Jusufbegovic


People also ask

How do I call a Groovy script from Jenkins?

Usage. To create Groovy-based project, add new free-style project and select "Execute Groovy script" in the Build section, select previously configured Groovy installation and then type your command, or specify your script file name.

What is the use of Groovy script in Jenkins?

Groovy is a very powerful language which offers the ability to do practically anything Java can do including: Create sub-processes and execute arbitrary commands on the Jenkins controller and agents. It can even read files in which the Jenkins controller has access to on the host (like /etc/passwd )


2 Answers

For future readers, Tim's comment above is the solution:

import jenkins.model.Jenkins

like image 61
agentgonzo Avatar answered Oct 21 '22 11:10

agentgonzo


I ran into the same problem "unable to resolve class jenkins.model.Jenkins" as commented by @iloveretards, until I realized I had tried to use the build step "Execute Groovy script". After switching to build step "Execute system Groovy script", this actually worked as intended:

import jenkins.model.Jenkins
Jenkins.instance.getItem("job-name").disable()
like image 25
Max Spring Avatar answered Oct 21 '22 11:10

Max Spring