【问题标题】:Running Groovy command from Jenkins using Groovy script plugin使用 Groovy 脚本插件从 Jenkins 运行 Groovy 命令
【发布时间】:2013-07-02 15:02:43
【问题描述】:

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

  1. 我有工作 A 和工作 B
  2. 我想在作业 B 执行时禁用作业 A,在作业 B 执行后,我想再次启用作业 A。

为了启用/禁用作业 A,我使用了 Groovy 插件:Groovy plugin

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

我在作业 B 开始执行时添加了以下代码 sn-ps:

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 脚本控制台运行此代码 sn-ps 时,它可以正常工作。 提前致谢。

【问题讨论】:

  • 您是否在脚本顶部导入了import jenkins.model.Jenkins
  • 它与使用执行系统 ​​Groovy 脚本选项的组合一起工作。不知道为什么它不能与无法识别此导入的 Execute Groovy 脚本选项一起使用,但前一个选项对我有用。赞赏。谢谢
  • 系统常规命令在 Jenkins 主 JVM 上运行,非系统常规命令在分叉 JVM 中的节点/代理上运行。非系统 groovy 命令无权访问 Jenkins 或任何内部对象。这就是为什么除非它是系统常规命令,否则这将不起作用

标签: groovy jenkins jenkins-plugins


【解决方案1】:

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

import jenkins.model.Jenkins

【讨论】:

  • 我来这里是为了寻找有关 Jenkins DSL 插件的信息。这个答案也解决了我的问题。
【解决方案2】:

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

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

【讨论】:

  • 哇,找了很久才找到这个。你这个男人!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      相关资源
      最近更新 更多