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?
Un nouveau plugin vous permet de le faire même lorsque Jenkins interdit l'accès en lecture anonyme:
Utilisation:
$ curl 'http://jenkins/buildByToken/build?job=jobname&token=mytoken'
Scheduled.
De même avec buildWithParameters
.
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")