J'ai vu des publications similaires à ceci sur SO, mais pas exactement ce que j'essaie de faire (ou du moins aucun exemple complet d'une commande à exécuter).
J'essaie de déclencher à distance une construction paramétrée sur Jenkins à l'aide de curl. L'option 'Empêcher la contrefaçon de sites croisés' est activée. J'ai donc également besoin de passer une miette valide.
Le script que j'ai est ci-dessous:
#!/bin/bash
json="{\"parameter\": [{ \"P1\": \"param1\", \"P2\": \"param2\", \"P3\": \"param3\" }]}"
crumb=`curl "http://SERVER/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)"`
curl -v -H $crumb -X POST http://SERVER/job/JOB_NAME/buildWithParameters -d token=runme --data-urlencode json="$json"
J'ai également essayé de modifier l'URL que je passe à curl pour:
USERNAME:APITOKEN@SERVER
et
USERNAME:PASSWORD@SERVER
La sortie de curl est:
* About to connect() to SERVER port 8080 (#0)
* Trying SERVER... connected
* Connected to SERVER (SERVER) port 8080 (#0)
* Server auth using Basic with user 'USERNAME'
> POST /job/JOB_NAME/buildWithParameters HTTP/1.1
> Authorization: Basic bjAwNjY5MjI6YWxLaW5kaTg=
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
> Host: SERVER:8080
> Accept: */*
> .crumb:776eb589e8b930d9f06cfc2df885314c
> Content-Length: 168
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 403 No valid crumb was included in the request
< Content-Type: text/html;charset=ISO-8859-1
< Cache-Control: must-revalidate,no-cache,no-store
< Content-Length: 1469
< Server: Jetty(8.y.z-SNAPSHOT)
<
Il semble donc que je ne passe pas la miette correctement, mais je ne suis pas sûr du format correct de la commande.
Le format correct est le suivant:
curl -H ".crumb:xxxxxxxxxxxxxxxxxxxxxx"
Ce qui a fonctionné pour moi:
SERVER=http://localhost:8080
CRUMB=$(curl --user $USER:$APITOKEN \
$SERVER/crumbIssuer/api/xml?xpath=concat\(//crumbRequestField,%22:%22,//crumb\))
curl --user $USER:$APITOKEN -H "$CRUMB" -d "script=$GROOVYSCRIPT" $SERVER/script
Cela a fonctionné pour moi:
obtenir des miettes $ wget -q --auth-no-challenge --user yourUserName --password yourPassword--output-document - 'http://myJenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)
'
Maintenant, lancez le travail Jenkins $ curl -I -X POST http://yourUserName:yourPassword@myJenkins:8080/job/JOBName/build -H "Jenkins-Crumb:44e7038af70da95a47403c3bed5q10f8"
HTTP/1.1 201 Date de création: vendredi 28 juillet 2017 09:15:45 GMT Options de type de contenu X: nosniff Emplacement: http: // myJenkins: 8080/queue/item/17/ Content-Length : 0
Ceci met l'accent sur la réponse de @seeker.
Portez une attention particulière à l'étape de la miette
Comme indiqué dans les autres réponses, les miettes que vous obtenez peuvent varier en fonction du navigateur que vous utilisez pour naviguer jusqu'à Jenkins, que ce soit Chrome, Curl ou WGet.
Mais, et c’est un élément important mais, la miette que j’ai utilisée pour la commande CURL est celle que j’ai obtenue de la commande WGET. Ce n'est pas la miette que j'ai obtenue avec la commande CURL -X GET.
Je ne comprends pas pourquoi c'est le cas, mais comme dans la réponse de @Seeker, cela a fonctionné pour moi.
J'ai des miettes différentes quand
Navigation vers http: // qajenkins: 8080/crumbIssuer/api/xml
Navigation vers http://10.143.18.43:8080/crumbIssuer/api/xml (qajenkins = 10.143.18.43)
Fonctionnement
curl -X WGET http://10.143.18.43:8080/crumbIssuer/api/xml
Ou courir
wget -q --auth-no-challenge - user raamee --password 12345678 --output-document - ' http://10.143.13.43:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField , ":", // miettes) '; echo
Pour obtenir la commande curl
curl -X POST -H "Jenkins-Crumb:2e03fc96f387abggga6581fe5883a14a" http://10.143.18.43:8080/view/Raamee_phase_2/job/test_remote_api_triggerring/buildWithParameters?token=MY_TOKEN --user "raamee:12345678"
J'ai utilisé la miette que j'ai obtenue avec la commande wget, la 4e commande.
Aucune des réponses précédentes n'a fonctionné pour moi, mais en mélangeant des drapeaux, j'ai réussi:
JKSERVER="http://localhost:8080"
JKUSER="jenkins_user"
JKPASSWORD="jenkins_password"
JKCRUMB=`wget -q --auth-no-challenge --user $JKUSER --password $JKPASSWORD --output- document - '$JKSERVER/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'`
curl --user $JKUSER:$JKPASSWORD -I -X POST "$JKSERVER/job/master/build" -H "$JKcrumb"