it-swarm.com.de

Jenkins: "Trigger Builds Remote", wenn das Token nicht funktioniert, wenn die Matrix-Autorisierungsstrategie verwendet wird

Ich habe ein Problem mit dem Auslösen von Builds in Jenkins mit aktivierter Authentifizierung und frage mich, ob jemand Ideen hat.

Ich habe Global Security für die Verwendung von LDAP mit aktivierter "Projektbasierter Matrix-Autorisierungsstrategie" konfiguriert. Der Benutzer "Anonymous" verfügt über die Berechtigung "Job> Build" und keine anderen Berechtigungen (insbesondere hat der Benutzer "Anonymous" NICHT die Berechtigung "Overall> Read"), da ich nicht möchte, dass jeder die Berechtigung anzeigen kann Liste der Arbeitsplätze und andere allgemeine Informationen).

Ich möchte, dass ein automatisiertes Skript in der Lage ist, einen Build mit der Funktion "Trigger Builds Remote" auszulösen. Dabei gebe ich einen ?token=[token]-Wert in der URL an und die Standardauthentifizierung sollte umgangen werden, sofern der [token]-Wert mit dem von mir festgelegten Wert übereinstimmt die Konfigurationsseite des Jobs. Das Ziel ist, NICHT einen regulären Benutzernamen/ein gültiges Kennwort in der Anforderung anzugeben, sondern lediglich das Token für diesen bestimmten Job anzugeben.

Die Dokumentation scheint darauf hinzuweisen, dass dies funktionieren sollte:
https://wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security

Ich erwarte also genau, dass diese HTTP-Anfrage funktioniert:

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

Aber ich bekomme:

[~]$ 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>

Wenn ich DO API-Authentifizierung verwende, funktioniert die Anforderung:

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

Laut der Dokumentation sollte die globale Authentifizierung jedoch umgangen werden, wenn das Token vorhanden ist und mit dem von mir konfigurierten Projekttoken übereinstimmt. Warum funktioniert das nicht? Welche anderen Informationen/Protokolle kann ich zur Verfügung stellen?

21
Stuart M

Es gibt ein neues Plugin, mit dem Sie das auch tun können, wenn Jenkins anonymen Lesezugriff verbietet:

Token Root Plugin erstellen

Benutzen:

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

Ebenso mit buildWithParameters.

36
Daniel Beck

Beispiel für die Verwendung des Plugins "Build Authorization Token Root" mit POST:

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

beachten Sie, dass für diesen Job "Trigger Builds Remote" aktiviert sein muss (mit Berechtigungstoken "SECRET").

0
Roman