# Jenkins Login per Java Download Manager



## PG_97 (8. Jul 2020)

Moin, 

eine Frage in die Runde. Derzeit bin ich dabei einen kleinen Update Manager für unsere Firmenprodukte zu schreiben. Dieser bezieht die Updatepakete von Jenkins und lädt diese im Programm hoch.
Der Download Manager steht soweit, es hapert leider an der Autentifizierung für Jenkins (http). Mit einem Basic Authenticator habe ich es schon versucht.

Wisst Ihr wie das beim Jenkins mit dem Login läuft?


----------



## sascha-sphw (8. Jul 2020)

Der Jenkins login läuft mit API Token. Dazu musst Du Dich mit dem enstprechenden User beim Jenkins anmelden und unter Configure kannst Du dann API Token erstellen.

Im Build Job dann noch über Enable project-based security die entsprechenden Rechte setzen.

Edit: Ich habe das mit einer Software Registry (REST Service) gelöst, der Jenkins verbindet sich, nachdem er eine neuen Version gebaut hat, mit der Registry und registriert diese dort. Meine Page sowie der Updater des Programms verbinden sich dann nur noch mit der Registry. Somit kann ich später, für nicht Freie Software einen Auth Service anbinden, damit jeder Nutzer seine eigenen Zugansdaten bekommt.


----------



## PG_97 (8. Jul 2020)

Vielen Dank, werde ich mal ausprobieren!


----------



## PG_97 (9. Jul 2020)

Zweierlei Fragen tun sich mir auf:
Einerseits muss ich den Token erstellen, dann überreiche ich diesen Token Jenkins. Was ich mich frage, wie überreiche ich diesen Token? Die zweite Frage, gibt es für die Token Erstellung und das überreichen dieses Token eine einfache Java - Methode ohne das ich mit Maven und Co. arbeiten muss?

Sorry für die Fragen, aber ich kenne mich weder mit Jenkins oder Authentifizierung in Java überhaupt nicht aus. Das einzige was ich hinbekommen habe ist die einfache Authentifizierung. Das ist halt mein erstes mal...


----------



## sascha-sphw (9. Jul 2020)

PG_97 hat gesagt.:


> Was ich mich frage, wie überreiche ich diesen Token?


https://${UPDATE_USER}:${UPDATE_TOKEN}@${JENKINS_HOME}/${PATH_TO_ARTIFACT}



PG_97 hat gesagt.:


> Die zweite Frage, gibt es für die Token Erstellung und das überreichen dieses Token eine einfache Java - Methode ohne das ich mit Maven und Co. arbeiten muss?


Die Token Erstellung geht nur manuell über die Jenkins GUI. Das Überreichen geht über die URL und die kannst Du aufrufen mit was immer Du möchtest. Aber ggf. verstehe ich die Frage falsch.


----------



## Dukel (9. Jul 2020)

Du kannst auch die Artifakte von Jenkins in ein Repo (entweder ein Fileshare, Web Dienst oder eine Applikation wie z.B. Nexus) nach erfolgtem Build legen und musst dann vom Update Manager nicht aufs Jenkins sondern auf das Repo zugreifen.


----------



## PG_97 (9. Jul 2020)

Also ich kriege diesen Token von Jenkins, den muss ich ja in JWT packen. Gibt es in Java, ohne das ich Maven und Co. nutzen muss, eine Methode, die diesen Token in eine Jason Datei schreibt und diese übergibt? Das übergeben würde ich ja mit https://${UPDATE_USER}:${UPDATE_TOKEN}@${JENKINS_HOME}/${PATH_TO_ARTIFACT} machen.


----------



## sascha-sphw (9. Jul 2020)

Ein JWT / JSON brauchst Du eigentlich nicht (außer Euer Jenkins wurde dahingehend modifiziert). Einfach die Werte (${...}) in der URL ersetzen und gut.


----------



## LimDul (9. Jul 2020)

Das Token musst du einmal manuell aus Jenkins kopieren und irgendwo in deinem Programm als Konfiugrationsdatei oder sonstiges ablegen.

Es gibt keine Möglichkeit Jenkins zu fragen nach dem Token - das Token brauchst du um Jenkins überhaupt fragen zu könne.


----------



## PG_97 (9. Jul 2020)

Ah, okay. Danke!
Wahrscheinlich werde ich das mit Verbindung über zweierlei Wege leiten müssen. Einerseits basic Autentifizierung und Jenkins Autentifizierung. Je nach ausgewählter Login-Methode nimmt dann das Programm bei der Authentifizierung den Token bzw. User und PW und dann der normale Download. 

Bei der Jenkins Authentifizierung dann sagen, bei 403, nehme diese Zeichenkette und übergebe diesen an Jenkins mithilfe der URL und lade dann die Datei runter. Ich verstehe.... Demnach jetzt das ganze noch einbauen und dann sollte es funktionieren. Okay... Dann mal frisch ans Werk.


----------



## Dukel (9. Jul 2020)

Ich würde nochmal die alternative #6 in den Raum werfen.


----------



## PG_97 (9. Jul 2020)

Joar ginge auch. Muss ich mal schauen.
Wäre eine große Herausforderung halt....


----------



## mrBrown (9. Jul 2020)

PG_97 hat gesagt.:


> Wahrscheinlich werde ich das mit Verbindung über zweierlei Wege leiten müssen. Einerseits basic Autentifizierung und Jenkins Autentifizierung. Je nach ausgewählter Login-Methode nimmt dann das Programm bei der Authentifizierung den Token bzw. User und PW und dann der normale Download.
> 
> Bei der Jenkins Authentifizierung dann sagen, bei 403, nehme diese Zeichenkette und übergebe diesen an Jenkins mithilfe der URL und lade dann die Datei runter. Ich verstehe.... Demnach jetzt das ganze noch einbauen und dann sollte es funktionieren. Okay... Dann mal frisch ans Werk.


Warum auf zwei Wegen?

Du musst einfach nur immer den Token nutzen, im Idealfall mit einem extra Nutzer im Jenkins, der keinerlei Rechte außer die zum Runterladen absolut nötigen besitzt.


----------



## PG_97 (9. Jul 2020)

FTP Server mit Basic Authentifizierung und Jenkins mit ultra komplexer Methode.

Dafür brauchst du zweierlei Wege.


----------



## mrBrown (9. Jul 2020)

Ach so...du willst die Sachen aber nicht aus dem Jenkins runter und per FTP wieder irgendwo hochladen?



PG_97 hat gesagt.:


> FTP Server mit Basic Authentifizierung und Jenkins mit ultra komplexer Methode.


Die Jenkins-Variante *ist* Basic Authentifizierung, nur dass das Passwort ein zufälliger Token statt dem Plaintext-Passwort des Nutzers ist.


----------



## PG_97 (9. Jul 2020)

Nee, zwei Möglichkeiten zum Downloaden um dann in unserer Software hochzuladen, wo das Update verteilt und installiert wird.


----------

