Gitlab CI/CD Hilfe

  • Hallo zusammen!


    Ich habe werfe hier mal eine Frage in die Runde: Gibt es hier Leute die sich mit CI/CD auskennen? Ich selbst erstelle PHP Anwendungen und nutze für die Versionierung GitLab. GitLab bietet das Feature CI/CD an, was mich sehr daran interessiert ist das automatische Deployment nach einem Commit, d.h wenn ich ein Commit ins Repo pushe, dass die Daten automatisch mittels SFTP z.b auf den dazu passenden WebSpace gebracht werden.

    Ich habe mich schon ausreichend mit Dokumentation beschäftigt, habe aber immer noch diverse Fragezeichen über meinem Kopf zu diesem Thema. Deswegen frage ich, ob hier einer Lust mir das genauer zu Erklären und oder sich mit mir zusammen zu setzen und das vielleicht mal zu besprechen über TS, Discord etc.


    Ich bedanke mich schonmal für jeden der mir da helfen möchte!


    Isaac

  • Ich denke https://www.redhat.com/de/topics/devops/what-is-ci-cd erklärt das ganze schon ganz gut.


    Vereinfacht gesagt geht um Sicherstellung von gewisser Codequalität mithilfe von Automatisierung. Das "Pipeline" kannst du direkt ins deutsche Übersetzen, denn dein Code durchläuft hier viele Stationen automatisiert.


    Guck dir allein mal an, was es für z.B. Jenkins ans Plugins gibt - Da bekommst du einen guten Eindruck was da alles so automatisiert werden kann und wird.


    Dein Background bisher ist aus privater Natur bzw. von einem kleinerem Unternehmen?

    LinkeIn und XING - Schreibt mir einfach eine PN.


    "Security is like an onion - the more you dig in the more you want to cry"

  • Ich nutze selbst GitLab mit GitLab CI sehr viel, sowohl für den "Eigenbedarf" als auch bei Kunden von mir. Das mal eben so zu erklären ist recht umfänglich und ebenso aufwändig. Außerdem würde etwas wie eine TeamSpeak/Discord-Session den ganzen Aufwand nur für eine Person bedeuten.


    Wenn du wirklich eine Art Individualunterricht möchtest, würde ich dir vorschlagen, eine Schulung zu besuchen oder sogar eine individuelle Schulung zu buchen. Alternativ gibt es echt haufenweise (echt gute und vollständige) Dokumentationen und auch Beispiele. Das ist m. E. ein guter Stand, um grundlegendes Wissen darüber zu erlangen. Bei weiteren Fragen kannst du natürlich gerne hier im Forum fragen, ich antworte dabei sehr gerne, allerdings sollte der Aufwand dann auch anderen zu Gute kommen (sprich: Nicht per TeamSpeak etc. sondern auf einer öffentlich einsehbaren Platform wie dieses Forum, Stackoverflow, etc.).


    Als Tip kann ich dir geben, für dich selbst mal folgende Fragen beantworten zu können:

    • Was ist die Grundidee von CI/CD?
    • Was ist ein GitLab Runner?
    • Was ist ein Build Job / eine Build Pipeline?

    Dann würde ich mir an deiner Stelle einfach mal selbst eine kleine Aufgabe stellen und diese versuchen zu lösen. Bei Fragen: Gerne hier melden.


    Viele Grüße
    Matthias

  • Ja vielen Dank, damit habe ich mich bereits beschäftigt. Ich hab jetzt schon ein paar Testläufe gemacht. Dazu einige Fragen. Meine .gitlab-ci.yml sieht wie folgt aus:


    Code
    1. image: ubuntu:18.04
    2. dev_deploy:
    3. only:
    4. - dev
    5. before_script:
    6. - apt-get update -qy
    7. - apt-get install -y lftp
    8. script:
    9. - lftp -e "set ssl:verify-certificate no; open $FTP_SERVER_HOST; user $FTP_SERVER_USER $FTP_SERVER_PW; mirror -X bower_components/ -X build/ -X dist/ -X plugins/ -X *.sql -X .* -X .*/ --reverse --verbose --delete /builds /; bye"


    Das klappt im groben schonmal soweit.... Meine Fragen dazu:


    • Wieso musste ich /builds als Ausgangsort festlegen? Vorher hat der Job alles transferiert + fing an OS Dateien und alles zu übertragen.
    • Wieso löscht mir der Job alles aus dem Hauptverzeichnis (nur Dateien)
    • Wie bekomme ich das hin, dass der Job nicht alles übertragt sondern nur die geänderten Dateien, um die Laufzeit zu verkürzen.
    • Und warum ist der Job so langsam? (Ich schätze das liegt an den shared Runners, überlege einen eigenen Aufzusetzen)
    • Wieso wurde alles in einen Unterordner verschoben, der meinen GitLab Account Namen hat?

    Schonmal vielen Dank, für die nette Hilfe!

    • builds_dir: Wie sieht denn deine Runner-Konfiguration aus? Siehe dazu auch https://docs.gitlab.com/runner….html#the-runners-section, vor allem das Argument "builds_dir". Oder nutzt du die Shared Runner von Gitlab? Bau in deinen Job mal ein "ls" ein, oder "set", oder beides, um ein paar Informationen über die Umgebung zu sammeln, in der der Job läuft.
    • Lokal (innerhalb des Jobs) oder auf dem Server? Was ist "alles"? Und was ist "alles (nur Dateien)" - jetzt doch nicht alles? Vermutung: Schau dir mal intensiv dein lftp-Command an. Da steht irgendwas von "--delete"... das hat allerdings dann mit GitLab CI nichts mehr zu tun sondern mit der Benutzung von lftp.
    • z. B. mit rsync statt lftp
    • Was ist denn "langsam"? Dauert es lange bis er startet, oder wenn er gestartet ist bis er fertig ist, oder oder oder..?
    • Lokal (innerhalb des Jobs) oder auf dem Server? Wenn innerhalb des Jobs: Ganz einfach. Ich finds irgendwie besser, wenn deine Dateien in deinem Unterverzeichnis liegen als in meinem.
  • Ja, ich hab einen shared Runner von GitLab benutzt.


    Ich habe mich jetzt mal weiter umgesehen und das ganze mal mit Jenkins probiert, da habe ich jetzt alles so hinbekommen wie ich es möchte :)

  • Ich revidiere meinen letzten Beitrag, habe jetzt mal einen eigenen Runner aufgesetzt und benutze diesen. Nach reiflichen Überlegungen will ich erstmal Jenkins vorne weg lassen.