Git Deployment

  • Moin zusammen und frohes neues Jahr,


    ich habe mich in den vergangenen Tagen mal etwas durchs Internet gestöbert und versucht etwas zu finden. Ich habe ein Repo bei Github, es geht dort um Websites. Dieses Repo (Website) würde ich gerne mittels Github Actions deployen (auf Knopfdruck) mittels Git. Bisher habe ich aber nichts passendes gefunden, was meinen Erwartungen entspricht. Ich hätte es gerne so, dass auf Knopfdruck, also wenn ich die Action trigger, dass per SSH auf den Server/Webhosting verbunden wird, ins Verzeichnis geht und dort dann auf den jeweiligen Commit geht.

    Ein einfaches git pull, ist ja nicht die Lösung, da ich damit nicht auf ältere Versionen zurück kann, da pull ja immer die neuste Version zieht.


    Hat da jemand Erfahrung? Oder sollte ich andere Ansätze verfolgen.


    Vielen Dank schonmal!

  • Normalerweise gibts entweder auf Webhostingseite oder auf $GIT_ANBIETER seite einen so genannten Web Hook, der das Deployment anstößt. Ich habe glaub ich mal gelesen, dass Plesk sowas hat. Da gibt man ein git Repo an. Bei $GIT_ANBIETER kann man dann einstellen, dass diese URL bei jedem commit (oder bei commits auf bestimmten branches) aufgerufen wird. Was dafür sorgt, dass Plesk die entsprechende Revision zieht und in den passenden Ordner schmeißt.


    Auf nem Server gibt es verschiedene Level an automation.


    Von selbst gebauten Cron-Shellscripten, die 5-Minütlich nach neuen Tags/Commits schauen und diese dann deployen bis hin zu Konstrukten mit Pipeline Agents oder Software wie Ansible.

  • Mit git kannst du auch gezielt einen branch/tag/commit pullen.


    Wenn nicht dann vielleicht rsync?

    Mir ist bewusst, dass das geht. Jedoch muss ja der Action halt übergeben werden zu welchem Stand er pullen soll. Was ich bisher gefunden habe ist, dass es Variable für den SHA-Wert eines Commites gibt. Damit müsste man ja pullen können.



    Normalerweise gibts entweder auf Webhostingseite oder auf $GIT_ANBIETER seite einen so genannten Web Hook, der das Deployment anstößt. Ich habe glaub ich mal gelesen, dass Plesk sowas hat. Da gibt man ein git Repo an. Bei $GIT_ANBIETER kann man dann einstellen, dass diese URL bei jedem commit (oder bei commits auf bestimmten branches) aufgerufen wird. Was dafür sorgt, dass Plesk die entsprechende Revision zieht und in den passenden Ordner schmeißt.


    Auf nem Server gibt es verschiedene Level an automation.


    Von selbst gebauten Cron-Shellscripten, die 5-Minütlich nach neuen Tags/Commits schauen und diese dann deployen bis hin zu Konstrukten mit Pipeline Agents oder Software wie Ansible.

    Ich würde halt ungerne mehrere Tools nutzen müssen um das zu bewerkstelligen. Das Repo liegt bei Github und ich dachte, dass es am einfachsten wäre, die dortigen Ressourcen zu nutzen.

  • Ich würde mit Git-Tags arbeiten, also ein Tag (den kannst du ja jederzeit für einen beliebigen Branch/Commit anlegen) in GitHub entspricht einem Deployment der Webseite. Das lässt sich mit Actions automatisieren: https://docs.github.com/en/fre…hpull_requestbranchestags


    Dann per scp den jeweiligen Code-Stand auf den Server schieben, z.B. hiermit (kurz gegoogelt, gibt auch noch andere actions dafür): https://github.com/marketplace/actions/scp-deploy-action

  • Habe ich letztens erst so ähnlich ins Fliegen gebracht:

    Mein lokales Git-Repo pushe ich nach Github und von dort dann automatisch weiter auf meinen Netcup-Webhosting-Tarif.

    In Github sind 2 Deploy-Keys hinterlegt: 1x für die Anbindung Lokale Umgebung -> Github und 1x für Github -> Netcup

    In Plesk gibt es in den Git-Einstellungen einen Eintrag für den Webhook, den Du dann bei Github eintragen musst.

    Das läuft einwandfrei.


    Um nicht durcheinander zu kommen, verwende ich in Github ein "Netcup"-Repo, das vom Rest der Entwicklung getrennt ist.

    Sprich: Das Repo kennt nur die Versionsstände, die bei Netcup veröffentlich werden sollen.


    Ich würde Dir daher empfehlen, nicht auf Netcup-Seite zu entscheiden, welches/n Commit/Branch Du beziehst, sondern eben auf Deiner lokalen Seite.