在Jenkins的奴隶

时间:2016-05-10 16:50:21

标签: jenkins groovy

我正在尝试使用Groovy插件在Jenkins的奴隶上执行一个简单的groovy脚本。 我正在使用执行groovy脚本选项, 执行系统groovy脚本选项。我也使用最新版本(2.4.6)插件的“自动安装”(从groovy网站安装)选项。但是,这项工作失败了,我得到了这个:

Building remotely on .... (...) in workspace C:\Jenkins_Slave\workspace\...
Unpacking https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.6.zip to C:\Jenkins_Slave\tools\hudson.plugins.groovy.GroovyInstallation\groovy_2_4_6 on ...
[groovy_reset_dead_slave] $ C:\Jenkins_Slave\tools\hudson.plugins.groovy.GroovyInstallation\groovy_2_4_6\bin\groovy.bat C:\Jenkins_Slave\workspace\...\hudson5850644430171226650.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
C:\Jenkins_Slave\workspace\...\hudson5850644430171226650.groovy: 5: unable to resolve class jenkins.model.Jenkins
 @ line 5, column 1.
   import jenkins.model.Jenkins
   ^

1 error

Build step 'Execute Groovy script' marked build as failure
Finished: FAILURE

如何克服此问题并使其正常工作?

2 个答案:

答案 0 :(得分:0)

来自Groovy plugin page

Groovy脚本与系统Groovy脚本 简单的“Groovy脚本”在分叉的JVM中运行,在运行构建的从属设备上运行。它与运行“groovy”命令并传入脚本基本相同。 系统groovy脚本OTOH在Jenkins master的JVM中运行。因此,它可以访问Jenkins的所有内部对象,因此您可以使用它来改变Jenkins的状态。它类似于Jenkins脚本控制台功能。

当不使用系统Groovy时,您的类路径中没有Jenkins对象。您需要确保可以从正在运行的作业访问所需的类,并在“执行groovy脚本”步骤的“类路径”字段中传递它们。

答案 1 :(得分:0)


我们可以使用RemoteDignostics类 以下脚本在主服务器上运行,但使用RemoteDignostics在Worker Nodes / slave上运行Groovy。
import hudson.util.RemotingDiagnostics
import jenkins.model.Jenkins


String agent_name = 'your agent name'

groovy_script = '''
println System.getenv("PATH")
println "uname -a".execute().text
'''.trim()

String result
Jenkins.instance.slaves.find { agent ->
    agent.name == agent_name
}.with { agent ->
    result = RemotingDiagnostics.executeGroovy(groovy_script, agent.channel)
}
println result