在groovy脚本中执行时,完美工作的curl命令失败

时间:2014-05-19 16:07:58

标签: curl groovy gitblit

我在gitblit中有一个post commit hook(一个groovy脚本)来调用REST端点。在这个脚本中,我正在执行curl命令。但似乎失败了。从命令行执行时,curl命令工作正常。

以下是我的常规脚本。

#!/usr/bin/env groovy


def repoUrl= "https://gitblit.myhost.com/git/" + repository + ".git"
json='{"repository":{"url":"'+repoUrl+'"}}'

def response = "curl -v -k -X POST -H \"Content-Type: application/json\" -d '${json}' https://username:password@anotherhost.com:9443/restendpoint".execute().text
println response 

存储库由gitblit传递给这个脚本,我已经验证了它。

有人可以帮助我。

4 个答案:

答案 0 :(得分:19)

我无法用你的例子重现你的问题,但我会尝试一下:

首先,使用列表execute()版本,这样您就不会遇到令牌问题:

process = [ 'bash', '-c', "curl -v -k -X POST -H \"Content-Type: application/json\" -d '${json}' https://username:password@anotherhost.com:9443/restendpoint" ].execute().text

其次,从过程中读取错误和输出:

process.waitFor()
println process.err.text
println process.text

err可能会发出正在发生的事情

答案 1 :(得分:13)

我能够通过将curl命令中的所有字符串传递给数组来实现此功能。以下是我的表现。

def response = ["curl", "-k", "-X", "POST", "-H", "Content-Type: application/json", "-d", "${json}", "https://username:password@myhost.com:9443/restendpoint"].execute().text

答案 2 :(得分:0)

避免“永远运行”过程(当输出超过4096字节时,会在某些Windows环境中发生这种情况)将初始大小添加到ByteArrayOutputStream

def initialSize = 4096
def out = new ByteArrayOutputStream(initialSize)
def err = new ByteArrayOutputStream(initialSize)
def proc = command.execute()
proc.consumeProcessOutput(out, err)
proc.waitFor()

答案 3 :(得分:0)

在Curl Post中-In-F选项-用双引号将整个参数包裹起来。不要忘记转义双引号以获取正确的语法。 下面的示例:

def response =“ curl -u admin:admin -F \” jcr:content / par / address / address1 = 2/3 Market Place \“ http://localhost:4502/content/datasource/branches”。execute()。text