web-dev-qa-db-fra.com

Comment arrêter une construction à Jenkins via le REST api?

J'ai un travail à Jenkins. Un site Web de nos propres déclencheurs construit ce travail via l’API REST. Parfois, nous voulons abandonner la construction. Parfois, cela peut être avant même que la construction ne soit lancée. Dans de tels cas, nous avons le queueItem # à la place du build #.

Comment le faire via l'API REST?

16
Barth

Si la construction a commencé, par POST sur:

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

Arrêtera/annulera la construction actuelle.

Si la construction n'a pas commencé, vous avez la queueItem, puis POST sur:

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

En supposant que votre serveur Jenkins n’ait pas été sécurisé, sinon vous devez ajouter authentification BASIC pour un utilisateur disposant de Cancel privilèges. 

25
Jifeng Zhang

En fait, cette question est déjà résolue. J'ajouterai donc comment trouver id=<queueItem>, ce qui m'a empêché de trouver cette solution, ce qui sera utile pour les autres.

Donc, vous pouvez obtenir <queueItem>, par - http: // jenkins: 8081/queue/api/json

La sortie exemple sera de type json comme celui-ci -

[{"_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"

Vous devez prendre "id":117 et l’analyser comme suit: - queueItem =117.

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

Peut-être voulez-vous envoyer à distance une requête post-http pour arrêter une construction en cours, il existe un indice, le travail jenkins peut arrêter un autre travail (construction en cours), comme tout administrateur jenkins, cliquez sur le bouton X lorsque le travail est en cours d'exécution. 

  1. Http Request Plugins est requis par Jenkins ver2.17
  2. Désélectionnez l'option Empêcher les exploits de demande intersite. Manager Jenkins -> Configurer la sécurité globale -> Décocher
  3. Configurer l'autorisation du plugin de requête HTTP. Gestionnaire Jenkins -> Configurer le système -> Requête HTTP Authentification de base/Digest -> add. Assurez-vous que l'utilisateur dispose de l'autorisation d'annulation du travail.
  4. Le travail A est en cours d'exécution. Dans le travail B, ajoutez l’étape de construction en tant que demande HTTP, URL: http: // URL_Jenkins/job/Nom_Assistant/lastBuild/stop , mode HTTP: POST, Autorisation, sélectionnez l’utilisateur que vous venez de définir, puis créez le travail B.

Terminé

1
David Wang

Si vous devez uniquement annuler la construction active à partir d'un certain travail, vous pouvez utiliser ce script de traitement par lots (syntaxe Windows .bat):

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

Le chemin vers votre boucle locale doit être défini

1
rawdesk.be