Curl jenkins管道中的简单groovy函数不起作用

Curl jenkins管道中的简单groovy函数不起作用,curl,groovy,jenkins-pipeline,Curl,Groovy,Jenkins Pipeline,我尝试在myFunction.groovy中使用curl下载一个文件 #!/usr/bin/env groovy def call(String URL = 'input') { def command="curl '${URL}' --create-dirs -o output/data.jsp" println command.execute().text println "ls -ltrah".execute().text } 还尝试: def call(String URL = 'i

我尝试在
myFunction.groovy中使用curl下载一个文件

#!/usr/bin/env groovy

def call(String URL = 'input') {
def command="curl '${URL}' --create-dirs -o output/data.jsp"
println command.execute().text
println "ls -ltrah".execute().text
}
还尝试:

def call(String URL = 'input') {
    echo "${URL}"
    echo "test"
    def command = ["curl", "${URL}", "--create-dirs", "-o", "output/data.jsp"].execute().text
    println "ls -ltrah".execute().text
}
此命令甚至可以在jenkins slave的执行脚本部分工作:

println "curl 'http://xxx/data.jsp' --create-dirs -o output/data.jsp".execute().text
我在jenkins管道中称之为:

myFunction 'http://xxx/file.jsp'
每次输出都在后面的阶段:

ENOENT: no such file or directory, open 'output/data.jsp'
我做错了什么?
当我在bash命令中执行该命令时,该命令会起作用。

已编辑

基于mkobit链接的,可以帮助您,请查看:

原件

我不会通过curl实现这一点,您可以使用Groovy SDK:

File file = new File('test/test.txt')
file.getParentFile().mkdirs()
file.write('http://www.google.com'.toURL().text)
如果不需要创建父目录,则它是一行:

new File('test.txt').write('http://www.google.com'.toURL().text)

要解决curl的问题,请检查curl版本,必要时进行更新。

在Jenkins管道中,您不能(也不应该使用全局库)这样做。@mkobit我认为您可以。:)你能解释一下我们不应该做什么以及为什么吗?另一个问题更好,但我会在这里补充一些东西。第一个是默认设置(或安全设置),这些方法将被阻止。这是因为Groovy管道在主机上执行,而不是在代理上执行。如果未进行安全检查,它可以读取文件、更改权限,甚至调用
System.exeit()
并终止Jenkins。阻塞调用(如HTTP调用或启动的进程)实际上会影响可恢复性和状态。有关详细信息,请参阅文档more@mkobit似乎有一个插件,请检查我编辑的答案。:)这是一种合理的方法-我在运行Jenkins实例时尽量避免使用插件,因为它们之间会发生大量的兼容性问题。在Jenkins管道中不应该使用
.execute()
或类似的东西。如果您需要支付,您应该使用
sh
步骤。
new File('test.txt').write('http://www.google.com'.toURL().text)