Ответ 1
Правильный формат выглядит следующим образом:
curl -H ".crumb:xxxxxxxxxxxxxxxxxxxxxx"
Я видел похожие сообщения для этого на SO, но не совсем точно, что я пытаюсь сделать (или, по крайней мере, нет полных примеров запускающей команды).
Я пытаюсь удаленно запускать параметризованную сборку на Jenkins с помощью curl. У меня есть "Предотвращение подбора запросов на межсайтовый сайт", поэтому мне также нужно передать действительную крошку.
script У меня есть ниже:
#!/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"
Я также пробовал модифицировать URL-адрес, который я передаю, чтобы завивать:
USERNAME:[email protected]
и
USERNAME:[email protected]
Выход из curl:
* 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)
<
Итак, похоже, что я не передаю крошку должным образом, но я не уверен, какой должен быть правильный формат команды.
Правильный формат выглядит следующим образом:
curl -H ".crumb:xxxxxxxxxxxxxxxxxxxxxx"
Что сработало для меня:
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
Это сработало для меня:
получить crumb $ wget -q --auth-no-challenge --user yourUserName --password yourPassword--output-document - 'http://myJenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)
'
Теперь запустите Jenkins Job $ curl -I -X POST http://yourUserName:[email protected]:8080/job/JOBName/build -H "Jenkins-Crumb:44e7038af70da95a47403c3bed5q10f8"
HTTP/1.1 201 Дата создания: пт, 28 июля 2017 г. 09:15:45 GMT X-Content-Type-Options: nosniff Расположение: http://myJenkins: 8080/queue/item/17/ Content-Length: 0
Это акцент на ответе @seeker.
Обратите особое внимание на получение шага мякиша
Как уже упоминалось в других ответах, крошка, которую вы получаете, может отличаться в зависимости от браузера, который вы используете для перехода к Jenkins, будь то Chrome, Curl или WGet.
Но, и это важно, но крошка, которую я использовал для команды CURL, - та, которую я получил от команды WGET. Это не та крошка, которую я получил от команды CURL -X GET.
Я не понимаю, почему это так, но, как и в ответе @Seeker, это сработало для меня.
Я получил разные крошки, когда
Перейдите на http://10.143.18.43:8080/crumbIssuer/api/xml (qajenkins = 10.143.18.43)
Бег
curl -X WGET http://10.143.18.43:8080/crumbIssuer/api/xml
Или работает
wget -q --auth-no-challenge --user raamee --password 12345678 --output-document - ' http://10.143.18.43:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, ":",//крошка) '; эхо
Для того, чтобы получить команду 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"
Я использовал крошку, полученную от команды wget, 4-й команды.
Ни один из предыдущих ответов не сработал для меня, но, смешав некоторые флаги, я заработал:
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"
Это сработало
crumb=$(curl -u "user:pass" -s 'http://jenkins_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -u "user:pass" -H "$crumb" -X POST **http://jenkins_URL/job/ENV/build?delay=0sec**
Примечание. Получите этот URL-адрес POST правой кнопкой мыши и скопируйте ссылку "Сборка сейчас".