web-dev-qa-db-fra.com

Comment désactiver un travail Jenkins via curl?

Je souhaite désactiver un travail Jenkins en envoyant une demande de post curl à Jenkins.

J'ai essayé de le faire en utilisant:

  1. curl -X POST http://<server>:8080/<jobname>/disable
  2. curl -X POST http://<server>:8080/<jobname>/disable?token=<token>
  3. curl -u <username>:<token> POST http://<server>:8080/<jobname>/disable

mais a échoué à chaque fois. L'erreur que je reçois est:

403 aucune miette valide n'a été incluse dans la demande

Existe-t-il une solution satisfaisante à ce problème?

13
rrawat

L'erreur crumb indique que vous utilisez CSRF Protection . Vous devez inclure un en-tête approprié dans votre demande. La miette peut être obtenue à partir de l'API Jenkins, comme décrit sur la page du wiki Jenkins liée ci-dessus. Le answer pour "Construction déclenchée paramétrée avec curl et crumb" indique la syntaxe permettant d'ajouter l'en-tête crumb dans la requête curl. 

8
Dave Bacher

Aucune miette valide signifie que votre installation Jenkins a une option de sécurité activée qui empêche les demandes envoyées de manière standard d'éviter les attaques en un clic . Vous ne pouvez pas utiliser Jenkins CLI non plus, car il ne fonctionne pas encore .

Voici les étapes à suivre avec curl (remplacez localhost par votre adresse Jenkins):

  1. Notez votre jeton API utilisateur (à partir de /user/USER/configure).
  2. Obtenez votre miette:

    CRUMB=$(curl -s 'http://USER:TOKEN@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
    
  3. Vous pouvez maintenant désactiver le travail en envoyant la miette dans les en-têtes:

    curl -X POST -H "$CRUMB" http://USER:TOKEN@localhost:8080/<jobname>/disable
    

    Si cela ne fonctionne pas pour une raison quelconque, vous pouvez essayer d'utiliser -u USER:TOKEN à la place.

14
kenorb

configurez les "paramètres de sécurité globaux" de jenkins: Décochez la case "Empêcher les exploits de requête multisite site". 

4
smilepy

J'ai trouvé la première partie de la solution de kenorb a fonctionné pour moi, c'est-à-dire obtenir les miettes, mais pour la deuxième partie, curl n'aimait pas cette syntaxe, elle disait:

curl: (6) Impossible de résoudre l'hôte 'http:'

J'ai donc dû utiliser la syntaxe suivante qui a fonctionné:

curl -H $CRUMB http://localhost:8080/<jobname>/disable -u USER:TOKEN

3
Will

Le ci-dessous travaille pour moi

curl -X POST http://<servername>/job/jobname/disable

Assurez-vous que l'utilisateur y a accès.

1
DevD