web-dev-qa-db-ja.com

カールとクラムを使用したパラメーター化ビルドのトリガー

私はこれと似たような投稿を見ましたが、私がやろうとしていることとまったく同じではありません(少なくとも、実行するコマンドの完全な例はありません)。

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"

また、curlに渡すURLを次のいずれかに変更しようとしました。

USERNAME:APITOKEN@SERVER

そして

USERNAME:PASSWORD@SERVER

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

だから、私はパン粉を適切に渡していないように見えますが、コマンドの正しいフォーマットがどうあるべきかわかりません。

25
JamesE

正しい形式は次のとおりです。

curl -H ".crumb:xxxxxxxxxxxxxxxxxxxxxx"
20
JamesE

私のために働いたもの:

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

これは私のために働いた:

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

Now Run Jenkins Job$ curl -I -X POST http://yourUserName:yourPassword@myJenkins:8080/job/JOBName/build -H "Jenkins-Crumb:44e7038af70da95a47403c3bed5q10f8"

HTTP/1.1 201作成日:2017年7月28日金曜日09:15:45 GMT X-Content-Type-Options:nosniff場所: http:// myJenkins:8080/queue/item/17 / コンテンツの長さ:0

10
Seeker

これは@seekerの答えに重点を置いています。

パンくずステップを取得することに特に注意してください

他の回答で述べたように、Chrome、Curl、WGetなど、Jenkinsを閲覧するために使用するブラウザーによって、表示されるパン粉が異なる場合があります。

しかし、これは重要ですが、私がCURLコマンドに使用したパン粉は、WGETコマンドから得たものです。 CURL -X GETコマンドから得たパン粉ではありません。

なぜそうなのかはわかりませんが、@ Seekerの答えのように、これは私にとってはうまくいきました。

私は別のパン粉を得たとき

  1. http:// qajenkins:8080/crumbIssuer/api/xml を参照

  2. http://10.143.18.43:8080/crumbIssuer/api/xml (qajenkins = 10.143.18.43)への参照

  3. ランニング

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

  4. または実行中

    wget -q --auth-no-challenge --user raamee --password 12345678 --output-document-' http://10.143.18.43:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField 、 ":"、// crumb) '; echo

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"

4番目のコマンドであるwgetコマンドから取得したパン粉を使用しました。

2
RaamEE

以前の回答はどれも私にとってはうまくいきませんでしたが、いくつかのフラグを混ぜることでうまくいきました:

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

これは働いた

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

注:これを取得するには、POST URLを右クリックして、今すぐビルドリンクをコピーします。

0
MOHAMED RAIYAN