2014-05-06 55 views
18

我見過類似的帖子到SO上,但不完全正是我想要做的(或者至少沒有完整的命令運行示例)。觸發器參數化生成捲曲和麪包屑

我想遠程觸發使用curl的Jenkins上的參數化構建。我有'防止跨站請求僞造'啓用,所以我還需要通過一個有效的麪包屑。

腳本我有低於:

#!/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] 

捲曲輸出爲:

* 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) 
< 

所以看起來我沒有正確傳遞碎屑,但我不確定該命令的正確格式應該是什麼。

+0

[Jenkins REST API Create job]可能重複(https://stackoverflow.com/questions/38137760/jenkins-rest-api-create-job) – kenorb

回答

17

的正確格式爲:

curl -H ".crumb:xxxxxxxxxxxxxxxxxxxxxx"

+0

這與您在問題中運行的內容有何不同?我遇到了同樣的問題,無法弄清楚它爲什麼拒絕碎屑,而且它看起來與您在此描述的方式完全相同。 – Jesse

+4

好的,想通了我的問題:如果您在用戶名下生成crumb(根據Jenkins安全性配置可能需要),任何進一步的請求也必須包含這些憑證,反之亦然。不知怎的,我錯過了這個。 – Jesse

+2

請注意,如果你通過directip/dns/etc等不同的「瀏覽器」如wget或不同的URL來獲取碎屑,麪包屑會有所不同,所以不要指望通過wget從某些東西得到碎屑,然後使用它捲曲。 – sjakubowski

21

什麼工作對我來說:

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 
6

這爲我工作:

獲得屑 $ wget -q --auth-no-challenge --user yourUserName --password yourPassword--output-document - 'http://myJenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)

立即運行詹金斯工作 $ curl -I -X POST http://yourUserName:[email protected]:8080/job/JOBName/build -H "Jenkins-Crumb:44e7038af70da95a47403c3bed5q10f8"

HTTP/1.1 201創建日期:星期五,2017年9時15分45秒GMT X-Content-Type的選項7月28日:nosniff地點:http://myJenkins:8080/queue/item/17/的Content-Length:0