web-dev-qa-db-fra.com

Jenkins: "Le déclencheur construit à distance" avec le jeton? Ne fonctionne pas lorsque la stratégie d'autorisation de matrice est utilisée

J'ai un problème avec le déclenchement des constructions dans Jenkins avec l'authentification activée et je me demande si quelqu'un a des idées.

Global Security est configuré pour utiliser LDAP avec l'option "Stratégie d'autorisation de matrice basée sur projet" activée. L'utilisateur "Anonyme" a le privilège "Travail> Construire" et aucun autre privilège (en particulier, l'utilisateur "Anonyme" N'A PAS le privilège "En général> Lire", car je ne veux pas que tout le monde puisse voir le liste des emplois et autres informations générales).

Je souhaite qu'un script automatisé puisse déclencher une génération à l'aide de la fonctionnalité "Déclenchement des générations de déclencheurs", où je spécifie une valeur ?token=[token] dans l'URL et où l'authentification standard doit être ignorée, tant que la valeur [token] correspond à celle définie dans la page de configuration du travail. L’objectif est de ET NON qu’il soit nécessaire de fournir un nom d’utilisateur/mot de passe standard dans la demande, mais simplement de fournir le jeton correspondant à ce travail spécifique.

La documentation semble indiquer que cela devrait fonctionner:
https://wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security

Donc, en particulier, je m'attends à ce que cette requête HTTP fonctionne:

curl -i https://jenkinsHost/job/ProjectName/build?token=test

Mais je reçois:

[~]$ curl -i https://jenkinsHost/job/ProjectName/build?token=test
HTTP/1.1 403 Forbidden
Date: Sat, 27 Apr 2013 23:17:03 GMT
Server: Winstone Servlet Engine v0.9.10
Content-Type: text/html;charset=UTF-8
Content-Length: 629
X-Powered-By: Servlet/2.5 (Winstone/0.9.10)
Set-Cookie: JSESSIONID.e9bc4765=e1f0a30b9f04b3740bae527a7822b2d5; Path=/; HttpOnly
Connection: close

<html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fjob%2FProjectName%2Fbuild%3Ftoken%3Dtest'/>
<script>
window.location.replace('/login?from=%2Fjob%2FProjectName%2Fbuild%3Ftoken%3Dtest');</script>
</head>
<body style='background-color:white; color:white;'>
Authentication required
</body></html>

Lorsque je UTILISE l’authentification API, la requête fonctionne:

curl --username "test_user:API_KEY" https://hostname/job/ProjectName/build?token=test

Mais encore une fois, selon la documentation, je pense qu’il est supposé éviter l’authentification globale si le? Jeton est présent et correspond au jeton de projet que je configure. Pourquoi ça ne marche pas? Quelles autres informations/journaux puis-je fournir?

21
Stuart M

Un nouveau plugin vous permet de le faire même lorsque Jenkins interdit l'accès en lecture anonyme:

Build Token Root Plugin

Utilisation:

$ curl 'http://jenkins/buildByToken/build?job=jobname&token=mytoken'
Scheduled.

De même avec buildWithParameters.

36
Daniel Beck

Exemple d'utilisation du plug-in "Construire un jeton d'autorisation" avec POST:

wget --post-data="job=MyJob&token=SECRET&MyParameter=hello" http://servername/jenkins/buildByToken/buildWithParameters

notez que "Trigger Builds Remote" doit être activé pour ce travail (avec jeton d'autorisation "SECRET")

0
Roman