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

使用Groovy脚本插件从Jenkins运行Groovy命令,groovy,jenkins,jenkins-plugins,Groovy,Jenkins,Jenkins Plugins,我想在Jenkins中强制执行以下场景: 我有工作A和工作B 我想在执行作业B时禁用作业A,在执行作业B后,我想再次启用作业A 为了启用/禁用作业A,我使用了Groovy插件: Groovy插件提供了两种可能性:执行Groovy脚本和执行系统Groovy脚本 在开始执行作业B时,我添加了以下代码段: Jenkins.instance.getItem("job_A").disable() Jenkins.instance.getItem("job_A").enable() 在执行作业B之后:

我想在Jenkins中强制执行以下场景:

  • 我有工作A和工作B
  • 我想在执行作业B时禁用作业A,在执行作业B后,我想再次启用作业A
  • 为了启用/禁用作业A,我使用了Groovy插件:

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

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

    Jenkins.instance.getItem("job_A").disable()
    
    Jenkins.instance.getItem("job_A").enable()
    
    在执行作业B之后:

    Jenkins.instance.getItem("job_A").disable()
    
    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)
    
    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)
    
    使用执行系统Groovy脚本: 当我运行作业B时,它失败,出现以下异常:

    Caught: groovy.lang.MissingPropertyException: No such property: Jenkins for class: hudson7198966217090520732
        at hudson7198966217090520732.run(hudson7198966217090520732.groovy:1)
    
    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脚本控制台运行这些代码片段时,它不会出现任何问题。
    提前感谢。

    对于未来的读者,蒂姆的上述评论是解决方案:


    import jenkins.model.jenkins

    我认为如果运行系统Groovy脚本,默认情况下jenkins对象是可用的。
    您正在运行的是groovy脚本。因此,需要导入包/类。

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

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

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


    您是否已在脚本顶部导入了
    import jenkins.model.jenkins
    ?它与使用执行系统Groovy脚本选项的组合一起工作。我不确定为什么它不能在无法识别此导入的情况下使用ExecuteGroovyScript选项,但前面的选项对我有效。谢谢。感谢系统groovy命令在Jenkins主JVM上运行,非系统groovy命令在分叉JVM中的节点/代理上运行。非系统groovy命令无权访问Jenkins或任何内部对象。这就是为什么除非它是一个系统groovy命令,否则它不会工作的原因。我来这里寻找有关Jenkins DSL插件的信息。这个答案也解决了我的问题。哇,我找了很久才找到这个。你就是那个人!