125026
Goto Top

Einführung einer Git-Versionierung in vorhandene Webserver-Umgebung

Hallo zusammen,

ich bin bei uns im Unternehmen für die Programmierung (Web, also PHP) zuständig. Nun haben die ganzen Projekte ein Ausmaß angenommen, das langsam unübersichtlich wird, deswegen brauche ich dringend eine Versionierung.
Zuerst zur vorhandenen Struktur:

Ich bearbeite Dateien auf meinem Notebook, lade Sie dann auf einen Test-Server hoch, teste die Skripte auf dem Test-Server und lade sich danach auf den Produktiv-Server. Dabei sind alle Server im lokalen Netzwerk (Intranet).

Nun habe ich begonnen, mich in das Thema Git-Versionierung einzulesen, und versuche die Zusammenhänge zu verstehen, kapiere aber irgendwas nicht.....deswegen folgend einmal das Ziel das ich mir vorstelle:

Ich bearbeite Dateien auf meinem Notebook, und commit diese änderungen dann in das Test-System. Wenn ich damit dann zufrieden bin "commit" ich den Stand auf das Produktiv-System.
Des weiteren sollte das Repo auf den beiden Servern direkt im WebbRoot liegen, sodass ich auch direkt meine Änderungen sehe.

Kann mir jemand nun vielleicht einen kleinen überblick geben, wie ich das realisieren kann?

Liebe Grüße Bodabirra

Content-Key: 341343

Url: https://administrator.de/contentid/341343

Printed on: April 19, 2024 at 05:04 o'clock

Member: Sheogorath
Sheogorath Jun 22, 2017 at 17:48:01 (UTC)
Goto Top
Moin,

in der Regel benutzt man git dafür nicht direkt so. Git ist ein Versionskontrollsystem, welches sicherstellt, dass deine Historie und dein Source-Code konsistent sind. Was du machen willst, sind aber deployments.

Git spielt beim sogenannten CD -> Continuous Deployment eine wichtige Rolle, aber eher als Werkzeug. Hierfür hast du im einfachsten Fall ein Client tool, welches mit deinem Git Repository Server und deinem Test- bzw. Produktiv-Server zusammen Arbeitet. Mein persönlicher Liebling ist Ansible in diesem Fall, aber natürlich kannst du auch Puppet, Salt Stack und Co. benutzen.

Der Workflow sieht dann so aus: Du erzeugst dir ein remote repository. Dieses liegt dann entweder auf GitHub, GitLab, BitBucket, Gogs oder einem anderen Repository Management lokal oder in der Cloud. Dort pushst du deine Änderungen hin. Dann nutzt du das CD Tool, also z.B. Ansible, und sagst, dass du gerne den Neusten Stand/die neuste Version (Hierfür kannst du in Git Tags benutzen) auf dein Server installiert/deployed werden soll. Ansible baut dann eine SSH Verbindung zu deinem Server auf und stellt sicher, dass das Repository auf deinem Webserver genau den Stand geladen hat, den du angegeben hast.

Wenn du das jetzt noch weiter automatisieren willst, kannst du das übrigens sogar mit git hooks automatisieren.

Alles in allem möchtest du dann ggf. noch ein paar Tests automatisieren. Hierzu kannst du mal einen Blick auf Jenkins, Travis-CI oder DroneCI werfen.

Es ist etwas umständlich, die gesamte Komplexität auf einen einzelnen kleinen Kommentar herunter zu brechen, aber ich bin mir sicher, dass ich ausreichend Schlagworte geliefert habe, dass du nicht das Rad neu erfinden musst ;)

Gruß
Chris
Mitglied: 125026
125026 Jun 23, 2017 at 13:40:38 (UTC)
Goto Top
Hallo Chris,

vielen lieben Dank für die ausführliche Antwort. Ich habe mir deine Schlagworte mal angeschaut, und versuche alles zu verstehen face-smile

Also:

Ich arbeite also lokal und schiebe meine Daten dann auf ein remote Repo. Danach übernimmt ein CD-Tool und schiebt mit die Änderungen an die jeweilige Stelle (Test-Server und/oder Produktiv). Ist das so richtig?

Das hört sich schonmal gut an. Nur sollte es natürlich so sein, dass Änderungen die ich ans remote Repo schicke, sollten sofort auf dem Test-Server aktiv sein sollen (Dazu ist er bei uns auch da). Aber so wie ich das sehe bekomme ich das mit einem der Tools die du genannt hast auf jeden Fall hin.

Gruß Benny
Member: Sheogorath
Sheogorath Jun 24, 2017 at 14:41:03 (UTC)
Goto Top
Moin,

Ist das so richtig?

Ja.

Das hört sich schonmal gut an. Nur sollte es natürlich so sein, dass Änderungen die ich ans remote Repo schicke, sollten sofort auf dem Test-Server aktiv sein sollen (Dazu ist er bei uns auch da). Aber so wie ich das sehe bekomme ich das mit einem der Tools die du genannt hast auf jeden Fall hin.

Dafür kannst du wie schon erwähnt git-hooks verwenden oder eben eine der Integrationen für Plattformen wie GitHub oder GitLab, die dann eben ein solches Deployment automatisch bei einem commit auslösen. Man kann sich sowas auch mit ein bisschen Kreativität und Wissen um Bash scripting und git selbst bauen, allerdings empfehle ich dir das hier nicht, weil du gerade erst in das Thema einsteigst und man extrem viel falsch machen kann.

Übliche Lösung: Ein Deployment Prozess, der sicher über die CI Lösung deiner Wahl triggert und dann das Projekt an die entsprechenden Stellen deployed. Alles Andere sprengt zum einen den Rahmen hier im Forum und zum Anderen ist nur bei sehr individuellen Deployment notwendig.

Aber mir ist da gerade noch etwas in den Schoß gefallen, was ziemlich genau deinen Wunsch widerspiegelt und mit git-hooks und ansible arbeitet: https://devopscube.com/automated-deployment-git-push-using-ansible/

Das sollte in jedem Fall deinen Ansprüchen genügen.

Gruß
Chris