web-dev-qa-db-fra.com

La commande curl qui fonctionne parfaitement échoue lorsqu'elle est exécutée dans un script groovy

J'ai un crochet de publication (un script groovy) dans gitblit pour appeler un terminal REST. Dans ce script, j'exécute une commande curl. Mais cela semble échouer. La commande curl fonctionne correctement lorsqu'elle est exécutée à partir de la ligne de commande.

Voici mon script groovy.

#!/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:[email protected]:9443/restendpoint".execute().text
println response 

le dépôt est passé par gitblit à ce script et je l’ai vérifié.

Quelqu'un peut-il m'aider avec ça.

14

Je ne pourrais pas reproduire votre problème avec votre exemple, mais je vais essayer de deviner:

Commencez par utiliser la version de la liste execute() pour ne pas avoir de problèmes avec les jetons:

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

Deuxièmement, lisez à la fois les erreurs et les résultats du processus:

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

Le err peut donner ce qui se passe

16
Will

J'ai réussi à faire fonctionner cela en passant toute la chaîne de ma commande curl dans un tableau. Voici comment je l'ai fait.

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

Dans Curl Post - Option In-F - encapsulez tout le paramètre avec des guillemets. N'oubliez pas d'échapper aux guillemets pour obtenir une syntaxe correcte . Exemple ci-dessous:

def response = "curl -u admin: admin -F \" jcr: content/par/address/address1 = 2/3 Marché\" http: // localhost: 4502/content/datasource/branches ". execute (). text

0
Dkumar

Pour éviter le processus "en cours d'exécution pour toujours" (cela se produit sous certaines env. Windows lorsque la sortie dépasse 4096 octets), ajoutez la taille initiale à ByteArrayOutputStream.

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