我正在尝试将执行cURL命令的groovy脚本导入到我的Jenkins管道中。当在管道外部(例如,从外壳程序)执行groovy脚本时,cURL命令可以正确执行,但是在管道内部,我的管道可以无错误地执行,但是cURL命令似乎没有执行。
test.groovy:
class GroovyClass{
def executeCurl() {
//define curl command and execute
def proc = "curl fakecommand".execute()
// cURL uses error output stream for progress output.
Thread.start { System.err << proc.err }
// Wait until cURL process finished
proc.waitFor()
}
}
return new GroovyClass();
Jenkinsfile:
if (run) {
def groovyClass= load 'test.groovy'
groovyClass.executeCurl()
}
答案 0 :(得分:0)
在Jenkins文件中,您只能使用实现可序列化接口的类的对象。
如果不是这种情况,有时您会收到错误消息,有时是偶然的,有时似乎什么也没发生。
如果要使用不可序列化类型的对象,则需要将其封装在用@NonCPS
注释的方法中。除此之外,在创建进程时,这还意味着您需要禁用沙箱模式。
但是,这不是您想要的。因为这会在不应该执行任何此类任务的轻量级执行器中对主服务器执行卷曲。
要在节点上的管道中执行某些操作,您必须使用bat
或sh
步骤。
请务必检查Jenkins Pipeline tutorial以及步骤参考和摘要生成器。文件访问的工作方式也不同。
您当然也可以使用bat
或sh
调用groovy二进制文件从管道内运行脚本