我在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传递给这个脚本,我已经验证了它。
有人可以帮助我。
答案 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