web-dev-qa-db-fra.com

Déclenchement paramétré construction avec curl et miette

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.

25
JamesE

Le format correct est le suivant:

curl -H ".crumb:xxxxxxxxxxxxxxxxxxxxxx"
20
JamesE

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
29
decocijo

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

10
Seeker

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

  1. Navigation vers http: // qajenkins: 8080/crumbIssuer/api/xml

  2. Navigation vers http://10.143.18.43:8080/crumbIssuer/api/xml (qajenkins = 10.143.18.43)

  3. Fonctionnement

    curl -X WGET http://10.143.18.43:8080/crumbIssuer/api/xml

  4. 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.

2
RaamEE

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"
0