我正在尝试使用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
如何克服此问题并使其正常工作?
答案 0 :(得分:0)
Groovy脚本与系统Groovy脚本 简单的“Groovy脚本”在分叉的JVM中运行,在运行构建的从属设备上运行。它与运行“groovy”命令并传入脚本基本相同。 系统groovy脚本OTOH在Jenkins master的JVM中运行。因此,它可以访问Jenkins的所有内部对象,因此您可以使用它来改变Jenkins的状态。它类似于Jenkins脚本控制台功能。
当不使用系统Groovy时,您的类路径中没有Jenkins对象。您需要确保可以从正在运行的作业访问所需的类,并在“执行groovy脚本”步骤的“类路径”字段中传递它们。
答案 1 :(得分:0)
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