Как устранить проблему «Ошибка 403 В запрос не был включен действительный крошечный крошка» при попытке опубликовать триггер сборки в perforce

Согласно https://support.cloudbees.com/hc/en-us/articles/219152268-Use-POST-Commit-Hook-with-Perforce-Triggers, я должен использовать следующее, чтобы опубликовать триггер для сборки.

#!/bin/bash

# The first argument is the change number
CHANGE=$1

# POST the payload
curl --header 'Content-Type: application/json' \
     --request POST \ 
     --data "{\"change\":$CHANGE, \"p4port\":\"localhost:1666\"}" \
     http://localhost:8080/p4/change

Я немного изменил это, чтобы добавить свой порт и изменить номер, после чего он начал выдавать мне проблему не найденного крошки.

Прочитав эти Как запросить эмитент крошки для Jenkins и Спинакер: 403 В запрос не было включено ни одного крошки., я сначала попытался отключить CSRF, но это дало мне 404, поэтому я попытался включить его, получил крошку и встроил его так, что снова дает мне 404.

curl -X POST http://username:password@jenkinsip:8080/p4/change -H "Jenkins-Crumb:the-crumb" --data "{\"change\":$CHANGE, \"p4port\":\"myport\"}"

Но если я попробую это сделать, я снова получу ту же ошибку 403.

curl -X POST http://jenkinsip:8080/p4/change -H "Jenkins-Crumb:the-crumb" --data "{\"change\":$CHANGE, \"p4port\":\"myport\"}"

Так что я делаю не так, что это дает мне 404


1
6 446
1

Ответ:

Решено

Прежде чем запрашивать у Jenkins запуск сборки на основе вашего нового изменения perforce, вам необходимо запросить крошку у Jenkins и включить ответ в свой запрос.

У нас работает следующий сценарий триггера:

#!/bin/bash
CHANGE=$1

P4PORT=<perforceserver>:<portnumber>
JUSER=<jenkinsuser>
JPASS=<hispassword>
JSERVER=https://<jenkinsserver>

# Get CRUMB
CRUMB=$(curl --insecure --silent --user $JUSER:$JPASS $JSERVER/crumbIssuer/api/xml?xpath=concat\(//crumbRequestField,%22":"%22,//crumb\))

curl --header "$CRUMB" \
     --request POST \
     --insecure \
     --silent \
     --user $JUSER:$JPASS \
     --data payload = "{change:$CHANGE,p4port:\"$P4PORT\"}" \
     $JSERVER/p4/change

Обновлять:
Я только что обнаружил, что однажды украл приведенный выше сценарий из документации для Jenkins Perforce Plugin. См. здесь.