Je souhaite désactiver un travail Jenkins en envoyant une demande de post curl à Jenkins.
J'ai essayé de le faire en utilisant:
curl -X POST http://<server>:8080/<jobname>/disable
curl -X POST http://<server>:8080/<jobname>/disable?token=<token>
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?
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.
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):
/user/USER/configure
).Obtenez votre miette:
CRUMB=$(curl -s 'http://USER:TOKEN@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
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.
configurez les "paramètres de sécurité globaux" de jenkins: Décochez la case "Empêcher les exploits de requête multisite site".
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
Le ci-dessous travaille pour moi
curl -X POST http://<servername>/job/jobname/disable
Assurez-vous que l'utilisateur y a accès.