使用Groovy脚本插件从Jenkins运行Groovy命令

时间:2013-07-02 15:02:44

标签: groovy jenkins jenkins-plugins

我想在Jenkins中强制使用以下场景:

  1. 我有工作A和工作B
  2. 我想在执行作业B时禁用作业A,并且在执行作业B之后,我想再次启用作业A.
  3. 要启用/禁用作业A,我使用了Groovy插件:Groovy plugin

    Groovy插件提供两种可能性:执行Groovy脚本执行系统Groovy脚本

    我在作业B的执行开始时添加了以下代码片段:

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

    执行作业B后:

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

    使用执行Groovy脚本

    当我运行作业B时,它失败并出现以下异常:

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

    使用执行系统Groovy脚本

    当我运行作业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脚本控制台运行此代码片段时,它可以正常工作。 提前谢谢。

4 个答案:

答案 0 :(得分:30)

对于未来的读者,Tim上面的评论是解决方案:

import jenkins.model.Jenkins

答案 1 :(得分:2)

我遇到了同样的问题,如@iloveretards所评论的“无法解析类jenkins.model.Jenkins”,直到我意识到尝试使用构建步骤“ Execute Groovy script”。切换到构建步骤“执行系统Groovy脚本”后,这实际上按预期工作:

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

答案 2 :(得分:1)

我认为如果你运行System Groovy Script,Jenkins对象默认是可用的。 你正在运行的是groovy脚本。因此,需要导入包/类。

答案 3 :(得分:0)

对我来说,上面给出的解决方案不起作用,但我尝试了以下方法并且效果很好:)

import jenkins.*
import jenkins.model.*
Jenkins.instance.getItemByFullName('folder/Sub_Folder/jobName').setDisabled(false)
相关问题