在Jenkins'上执行groovy脚本;奴隶

在Jenkins'上执行groovy脚本;奴隶,jenkins,groovy,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插件在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
如何克服此问题并使其正常工作?

来自:

Groovy脚本与系统Groovy脚本 普通的“Groovy脚本”在一个分叉的JVM中运行,在运行构建的从机上运行。这与在脚本中运行“groovy”命令和pass基本相同。 系统groovy脚本OTOH在Jenkins master的JVM中运行。因此,它将访问Jenkins的所有内部对象,因此您可以使用它来更改Jenkins的状态。它类似于Jenkins脚本控制台功能

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

来自:

Groovy脚本与系统Groovy脚本 普通的“Groovy脚本”在一个分叉的JVM中运行,在运行构建的从机上运行。这与在脚本中运行“groovy”命令和pass基本相同。 系统groovy脚本OTOH在Jenkins master的JVM中运行。因此,它将访问Jenkins的所有内部对象,因此您可以使用它来更改Jenkins的状态。它类似于Jenkins脚本控制台功能

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


我们可以使用RemoteDignostics类 以下脚本在主节点上运行,但使用RemoteDignostics在工作节点/从节点上运行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

我们可以使用RemoteDignostics类 以下脚本在主节点上运行,但使用RemoteDignostics在工作节点/从节点上运行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

路径conent应该在哪里,在奴隶身上还是在另一个地方?我的代码应该在从机上运行,所以如果我理解正确,我只需要避免使用“import jenkins.model.jenkins”?路径应该在从机上。这意味着您需要将所有必需的jar文件复制到从属服务器。似乎您需要复制相当多的jar文件——我还没有尝试过,但您可能希望创建一个自定义工具,将jar部署到您的从属服务器。不过,您可能需要考虑移动到系统Groovy,因为您将所有的“自由”类改为Groovy来修复问题。谢谢路径conent应该在哪里,在奴隶身上还是在另一个地方?我的代码应该在从机上运行,所以如果我理解正确,我只需要避免使用“import jenkins.model.jenkins”?路径应该在从机上。这意味着您需要将所有必需的jar文件复制到从属服务器。似乎您需要复制相当多的jar文件——我还没有尝试过,但您可能希望创建一个自定义工具,将jar部署到您的从属服务器。不过,您可能需要考虑移动到系统Groovy,因为您将所有的“自由”类改为Groovy来修复问题。谢谢