Git & Jenkins auf RaspberryPi



  • Hallo,

    auf meinem RaspberryPi habe ich Jenkins und Git installiert, ein Repository in Git gibt es bereits. Ich kann es problemlos von meinem Windows-Rechner aus auschecken, einchecken funktioniert auch. Ich checke aus mit

    git@192.168.69.64:/home/git/repository.git
    

    und dem Passwort für den Benutzer <git>.

    Nun versuche ich mit Hilfe des Jenkins dieses Repository auszuchecken, bekomme aber die Fehlermeldung:

    Failed to connect to repository : Command "git ls-remote -h -- git@192.168.69.64:/home/git/repository.git HEAD" returned status code 128:
    stdout:
    stderr: Host key verification failed.
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    

    Ich habe noch immer nicht verstanden, wie das mit dem Benutzer <jenkins> auf dem RaspberryPi funktioniert. Muss ich den am git-Server (also beim Daemon) irgendwie anmelden, damit er auschecken darf? Oder muss ich die Kombination Privater / Öffentlicher Schlüssel nutzen, damit das funktioniert.

    Es gibt tonnenweise Tutorials bei YouTube, aber alle beschäftigen sich immer nur mit github.com, gitlab.com, usw. Ich habe keine Anleitung gefunden, die sich auf einen eigenen Git-und auch Jenkinsserver bezieht.

    Hat jemand eine Ahnung, wo ich eine solche Schritt-für-Schritt-Anleitung finden kann? Oder kann jemand anderweitig helfen?

    Vielen Dank im Voraus

    VG Torsten



  • https://www.thegeekstuff.com/2016/10/jenkins-git-setup/

    grundsaetzlich wuerde ich von jenkins abraten. das ganze gleicht mehr einem kartenhaus, welches den ventilator direkt mitbringt. in ueber 10 jahren habe ich noch niemanden kennen gelernt der gerne damit gearbeitet hat.

    wenn du git server + ci/cd + gui in einem haben willst, wuerde ich gitlab-ce empfehlen.



  • @Cardiac Hm... ich habe das "Privileg" bei uns in der Firma "nebenbei" für solche Dinge zuständig zu sein, obwohl ich eigentlich gar keine Ahnung von sowas habe (wir sind zu klein, als dass wir einen Admin hätten, also bin ich es). Ich habe vor ca 10 Jahren einmalig (so lange schon her?) Jenkins und Gerrit aufgesetzt - und eigentlich habe ich nicht wirklich viel Arbeit damit. Einmalig pro Projekt/Repository eine Pipeline in Jenkins einrichten (inzwsichen meist copy-paste + Pfade anpassen), ggf. irgendwie das Testing konfigurieren (sodass Jenkins eine +1/-1 an Gerrit gibt), fertig. Ist vielleicht alles nicht so einfach wie in moderneren Tools, aber löppt stabil. Und ich bin mir sicher, dass das noch ein paar Jahre genau so lauffähig bleibt und dass Updates kein Problem sind. Davor habe ich nämlich bei diesem "neumodischen Kram" Angst 😉 Hach, ich werde alt. (oder das kommt daher, dass ich mal gitlib auf einer Synology ausprobiert hatte, damit aber nicht glücklich war und vor allem keinen Plan hatte, wie ich das sinnvoll gebackupt kriege)

    Vielleicht sollte ich das gitlab-ce auch mal ausprobieren...

    Falls sich hier jemand noch damit auskennt, ich nehme in diesem Bereich Ratschläge immer gerne an (solange die Repositories nicht irgendwo extern liegen). Ich bin zwar mit Gerrit sehr zufrieden, aber ich nutze in Jenkins eine Möglichkeit von ganz viel Kram, den ich nicht brauche. Also falls insbesondere jemand einen Jenkins-Ersatz kennt/empfehlen kann, der mit Gerrit zusammenspielt, dann gerne!



  • mittlerweile bin ich einer von 3 devops engineers bei uns und im vergleich zu meiner sr sysadmin role vorher, finde ich das sogar interessanter.

    alternativen zu jenkins gibts wie sand am meer. die meisten haben nur den nachteil cloud-native zu sein. concourse-ci (inkl. git-resource) koennte ggf interessant sein. ich kenne gerrit nicht, aber concourse kannst eigentlich ueberall hinzeigen lassen. dann hast natuerlich noch den ganzen anderen kraempel wie circle, travis, woodpecker, packer und wie sie nicht alle heissen. drone ist auch nicht schlecht, allerdings kannst das auch wieder nur an cloud provider koppeln.

    gitea hat mittlerweile auch eine ci(/cd?) solution integriert, allerdings hat mir persoenlich gitlab schon immer mehr zugesagt.

    eines meiner hauptprobleme mit jenkins ist, dass du fuer jeden scheiss nen separates plugin brauchst und das tool an sich selbst quasi nichts kann. und einige dieser plugins sind von so schlechter qualitaet, das du den kack dann trotzdem noch selbst basteln musst.

    ich habe in meinem homelab seit geraumer zeit gitlab in pods laufen, was den management aufwand fast vollstaendig eliminiert hat. ci ist ebenfalls gitlab und argo deploy'd alles in k3s.
    der stack ist fuer die meisten anwendungen absoluter overkill, aber da ich bei uns in der org einen aehnlichen stack manage, empfand ich das als angemessen. (gitlab-ee -> gitlab-ci -> aws ecr -> argo -> aws eks)

    tl;dr gitlab (oder von mir aus gitea) als komplettloesung ist schon recht gut, besonders fuer kleine shops



  • Nach der fehlermeldung zu urteilen und der url wird hier git via ssh verwendet.

    Wieso hast du nicht einfach mal nach der Fehlermeldung zusammen mit jenkins gesucht?
    Wenn ich nach "jenkins git host key verification failed" suche fand ich das hier:

    https://community.jenkins.io/t/git-stderr-host-key-verification-failed/4534
    welches wiederum zur jenkins git plugin dokumentation führt:
    https://plugins.jenkins.io/git-client/#plugin-content-ssh-host-key-verification



  • @Cardiac sagte in Git & Jenkins auf RaspberryPi:

    alternativen zu jenkins gibts wie sand am meer.

    Hach ja, das ist das größte Problem. Ich kannte Jenkins. Wusste dass Jenkins funktioniert. Alternativen? Da müsste ich erst genauer schauen und mich ggf. einarbeiten.

    concourse-ci (inkl. git-resource) koennte ggf interessant sein

    Schaue ich mir nächste Woche mal an, notiert.

    ich kenne gerrit nicht

    Gibts hier: https://www.gerritcodereview.com/ - man macht nicht Pull Requests, sondern die commit bekommen eine ChangeId in der Commit Message, über die sie identifiziert werden. Wenn jemand was im Code Review anmeckert (passiert bei uns eigentlich fast immer), dann amended man den Commit und pusht erneut (auf einen speziellen Review-Branch, z.B. refs/for/main). Über die ID weiß Gerrit dann, was zusammenpasst. Wir rebasen bevorzugt, sodass unsere git-History ziemlich linear ist - nur selten sind merges drin.

    eines meiner hauptprobleme mit jenkins ist, dass du fuer jeden scheiss nen separates plugin brauchst und das tool an sich selbst quasi nichts kann. und einige dieser plugins sind von so schlechter qualitaet, das du den kack dann trotzdem noch selbst basteln musst.

    Ich muss in Jenkins abhängig von der requirements.txt eine Python-Umgebung erstellen und darin sicherstellen, dass Code mit Black/isort formatiert ist, muss pytest ausführen (und sicherstellen, dass alle Tests durchlaufen) und mache noch so ein paar Späße wie sloccount und pylint inklusive Anzeige in Jenkins. Ich habe aktuell noch ein Projekt, das auch C++-Code enthält - zukünftig wird bei und alles Python sein (oder wer weiß, vielleicht irgendwann Mojo?).

    tl;dr gitlab (oder von mir aus gitea) als komplettloesung ist schon recht gut, besonders fuer kleine shops

    Sollte ich mir wirklich mal anschauen! Danke.



  • Hallo,

    halbwegs wieder lebendig melde ich mich mal zurück. Vielen Dank für die vielen Antworten und Tipps.

    Ich würde am liebsten TeamCity nutzen, aber das darf ich leider in der Firma nicht. Die üblichen Gründe sind:

    1. Kennen wir nicht
    2. Wir haben schon immer...

    Ich könnte manchmal echt ko... . Sorry, zurück zum Thema.

    @firefly Genau diese Seiten habe ich gefunden, sie haben mir nur leider rein gar nichts gebracht. Ich habe sogar die Sicherheit für das Jenkins-Login abgeschaltet. Ich bekomme genau die selbe Fehlermeldung.

    Was mich enorm wundert ist die Tatsache, dass ich den Job mit "Username and Password" konfiguriere. Mit genau diesen (Git-) Kontodaten kann ich mittels GitExtensions auf meinem PC auschecken. Warum ist das so? Warum soll das nicht auch das Jenkins-Webinterface können? Genau diesen Umstand kann ich nicht nachvollziehen.

    VG Torsten



  • @TorDev sagte in Git & Jenkins auf RaspberryPi:

    @firefly Genau diese Seiten habe ich gefunden, sie haben mir nur leider rein gar nichts gebracht. Ich habe sogar die Sicherheit für das Jenkins-Login abgeschaltet. Ich bekomme genau die selbe Fehlermeldung.

    Vermutlich weil du das Problem immer noch nicht verstanden hast.

    Sicher das du die identische URL auf deinem PC und in der jenkins job config verwendest für den git checkout
    Denn, wie schon gesagt, wird laut der Fehlermeldung versucht via ssh die Verbindung zum git repro aufzubauen. Da bisher von dem jenkins nutzer (unter dem der job läuft) keine Verbindung via ssh zum ziel system aufgebaut wurde, wird dem host nicht bei default vertraut sondern es wird erwartet dass der Nutzer bestätigt, dass es der richtige host ist mit dem die Verbindung aufgebaut werden soll.

    Und das hat null mit irgendwelchen passwort einstellungen zu tun!



  • Kann es sein, dass du beim setup des Git Servers dich an einer Anleitung ähnlich dieser gehalten hast?
    https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server

    Wenn ja, dann wird hier definitiv eine SSH Verbindung verwendet um mit dem git repository zu kommunizieren.

    Dann ist https://plugins.jenkins.io/git-client/#plugin-content-ssh-host-key-verification die korrekte hilfe



  • Hallo,

    ja, ich habe das Problem noch nicht verstanden. Schön, dass wir uns diesbezüglich einig sind 😉

    Also nochmal langsam. Ich habe die URL aus GitExtensions herauskopiert und im Jenkins-Job eingefügt. Die sollte also stimmen. Die Zugangsdaten sind auch identisch. Als Test habe ich aus der Fehlermeldung die URL herauskopiert und den Check-Out-Vorgang in einem Konsolenfenster gemacht. Funktioniert natürlich.

    Für weitere Tests habe ich mir nun noch eine VM mit Debian12 aufgesetzt. Es ist nun zwar ein anderer Benutzername, aber das Problem ist identisch. Ich gehe davon aus, dass GitExtension "im Hintergrund" via SSH geht?

    Nochmal zum Verständnis. Ich muss bzw. will kein SSH nutzen, ich bin hier im privaten Umfeld und der Git-Server läuft nicht am laufenden Band.

    Ich werde mir jetzt die Git-Anleitung mit den Benutzern noch einmal ganz in Ruhe durchlesen. Vielleicht finde ich meinen Fehler, bzw. das mir fehlende Verständnis.

    VG Torsten



  • @TorDev
    Das es auf deinem PC funktioniert liegt daran, dass du irgendwann dem host vertraut hast.
    Kann es sein, dass du von deinem PC aus via SSH auf den RPi zugreifst und dadurch das system dem hostkey des RPi SSH Servers schon vertraut?

    Um das zu prüfen, mit hinblick auf deine Frage bezüglich "OpenSSH Windows 11 mit Pin?", öffne mal folgende datei mit einem text-editor:

    %USERPROFILE%\.ssh\known_hosts
    

    Wenn meine Vermutung richtig ist, sollte es dort eine zeile geben, welche mit

    192.168.69.64
    

    beginnt

    Wie genau hast du denn nun den "Git-Server" aufgesetzt?

    Nochmal zum Verständnis. Ich muss bzw. will kein SSH nutzen, ich bin hier im privaten Umfeld und der Git-Server läuft nicht am laufenden Band.

    Öhm Wieso? Was hat die Dauer wie lange der Server damit zu tun ob SSH genutzt wird oder nicht?



  • Hallo nochmal,

    nach Lesen der Anleitung funktioniert es jetzt. Ich fürchte, ich brauche eine Weiterbildung bzgl. SSH und SSL, ist schon seit geraumer Zeit bei meinem PL angemeldet.

    Was genau das Problem nun ist, habe ich bisher nicht herausgefunden. Ich habe manchmal so lichte Momente - wenn der kommt, melde ich mich hier noch mal 😉

    Vielen Dank für deine Hilfe @firefly 🙂

    VG Torsten


Anmelden zum Antworten