web-dev-qa-db-de.com

So stoppen Sie einen Build in Jenkins über die REST api?

Ich habe einen Job in Jenkins. Eine eigene Website löst diesen Job über die API REST aus. Manchmal möchten wir den Build abbrechen. Manchmal kann es sein, bevor der Build überhaupt gestartet wird. In solchen Fällen haben wir das queueItem # anstelle des build #.

Wie geht das über die REST API?

16
Barth

Wenn der Build gestartet wurde, von POST am:

http://<Jenkins_URL>/job/<Job_Name>/<Build_Number>/stop

Stoppt/bricht den aktuellen Build ab.

Wenn der Build noch nicht gestartet ist, haben Sie die Variable queueItem und POST am:

http://<Jenkins_URL>/queue/cancelItem?id=<queueItem>

Dies setzt voraus, dass Ihr Jenkins Server nicht gesichert ist. Andernfalls müssen Sie BASIC-Authentifizierung für Benutzer mit Cancel hinzufügen. 

25
Jifeng Zhang

Eigentlich ist diese Frage bereits beantwortet. Ich füge also hinzu, wie man id=<queueItem> findet, was mich beim Finden dieser Lösung, die für andere hilfreich sein wird, steckengeblieben ist.

So erhalten Sie <queueItem> durch - http: // jenkins: 8081/queue/api/json

Die Sample-Ausgabe wird vom Typ Json wie dieser sein -

[{"_class":"hudson.model.Cause$RemoteCause","shortDescription":"Started by remote Host 172.18.0.2","addr":"172.18.0.2","note":null}]}],"blocked":false,"buildable":false,"id":117,"inQueueSince":16767552,"params":"\nakey\t=AKIQ\nskey=1bP0RuNkr19vGze/bcb4ijDqVr8o\nnameofr=us\noutputtype=json\noid=284102\nadminname=admin","stuck":false,"task"

Sie müssen "id":117 nehmen und nach - queueItem =117 parsen.

http://<Jenkins_URL>/queue/cancelItem?id=queueItem
2
Abhishek Kumar

Vielleicht möchten Sie eine HTTP-Anforderung per Post senden, um einen laufenden Build zu stoppen. Es gibt einen Hinweis. FYI. Der Jenkins-Job kann einen anderen Job anhalten (ausgeführtes Build). Klicken Sie auf die Schaltfläche X, wenn der Job ausgeführt wird. 

  1. HTTP Request Plugins wird von Jenkins ver2.17 benötigt
  2. Deaktivieren Sie die Option Verhindern von Cross-Site-Request-Fälschungen. Manager Jenkins -> Globale Sicherheit konfigurieren -> Deaktivieren
  3. Richten Sie die Installation der HTTP-Request-Plugins ein. Manager Jenkins -> System konfigurieren -> HTTP Request Basic/Digest Authentication -> Add. Stellen Sie sicher, dass der Benutzer über die Berechtigung zum Abbrechen des Jobs verfügt
  4. Job A läuft. Fügen Sie in Job B einen Build-Schritt als HTTP-Request hinzu, URL: http: // Jenkins_URL/job/Job_A_Name/lastBuild/stop , HTTP-Modus: POST, Autorisierung Wählen Sie den soeben eingestellten Benutzer aus und erstellen Sie Job B.

Erledigt

1
David Wang

Wenn Sie nur den aktiven Build von einem bestimmten Job abbrechen müssen, können Sie dieses Batch-Skript (Windows-BAT-Syntax) verwenden:

REM @Echo off
CLS
REM CANCEL ACTIVE BUILD
REM PARAMETER 1 ACTIVE JOB NAME
if [%1] == [] GOTO NO_ARGUMENT
SET domain=https://my.jenkins.com/job/
SET path=/lastBuild/stop
SET url=%domain%%1%path%
"\Program Files\Git\mingw64\bin\curl.exe" -X POST %url% --user user:pass"
GOTO THEEND
:NO_ARGUMENT
Echo You need to pass the active jobname to cancel last build execution
:THEEND

Der Pfad zu Ihrer lokalen Curl muss festgelegt werden

1
rawdesk.be