Согласно 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
Прежде чем запрашивать у 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. См. здесь.