Git Versionskontrolle

Bei Git handelt es sich um ein aus der Softwarentwicklung bekanntes verteiltes Versionsverwaltungstool. Hiermit lassen sich verschiedene Versionsstände von Textdateien verwalten und die Historie erfassen.

Um Änderungen an den Puppet Manifesten jederzeit nachvollziehen zu können und bei Bedarf wieder auf die letzte Version zurückkehren zu können, ist eine Versionsverwaltung vor allem in größeren Umgebungen zu empfehlen.

 

Vorbereitungen

Das Git Repository kann auch auf einem anderen Server (z.B. zentrale Versionskontrolle) installiert werden und muss nicht zwingend auf dem Puppet Master liegen.

Im ersten Schritt installieren wir die notwendigen Pakete.

 

Benutzer erstellen

Anschließend erstellen wir einen neuen Benutzer git auf dem System über den die Administratoren später Änderungen einreichen können.

 

SSH Key hinzufügen

Um später an das Git Verzeichnis Pushen zu können, muss der eigene Public Key zu der Datei authorized_keys hinzugefügt werden. Hierzu wechseln wir zunächst zum git Benutzer.

Auf unserem lokalen System übertragen wir jetzt den Key an den Server:

 

Repository anlegen

Im Anschluss legen wir ein neues Verzeichnis für die Repositories an

und erstellen eine neues Repository für unsere Puppet Module.

 

Konfiguration der Git Hooks

Als Nächstes setzen wir die Git Hooks auf. Hierbei handelt es sich um Skripte, welche z.B. beim Übermitteln von Änderungen an das Git Repository (= Push) ausgeführt werden. In unserem Fall erfüllen die Hooks zwei grundlegende Funktionen.

 

  • Prüfung auf Syntaxfehler
  • Deployment in die Produktivumgebung

 

Vorbereitungen / Abhängigkeiten

Alle notwendigen Git Hooks stehen im GitHub Repository von David Wahlstrom zur Verfügung. Da einige Hooks noch weitere Skripte benötigen, laden wir das gesamte Repository herunter.

Im ersten Schritt kopieren wir die benötigten Skripte in unser Git Repository.

 

Pre-Commit

Zunächst konfigurieren wir den pre-commit Hook. Hierzu wechseln wir in das Verzeichnis /home/git/repos/puppet.git/hooks und kopieren die Hook Datei bzw. machen sie anschließend ausführbar. Hiermit wird der Code bereits clientseitig beim Commit auf evtl. Fehler geprüft.

 

Pre-Receive

Im nächsten Schritt erfolgt die Installation des pre-receive Hooks. Dieser prüft den Code vor dem Pushen (Übermitteln) an das Puppet Repository und stellt damit die zweite Prüfungsinstanz dar.

 

Post-Receive

Den post-receive Hook verwenden wir zum Deployment des geprüften Codes in die Produktivumgebung. Hier kommt eine angepasste Implementierung aus unserem FoxPlex Blog zum Einsatz.

Damit werden alle Änderungen im Branch production nach der Übermittlung an unser Puppet Repository in das Puppet Verzeichnis eingespielt und somit produktiv gesetzt. Änderungen, welche im Standardbranch master oder anderen Branches erfolgen werden nicht automatisch in die Produktivumgebung eingespielt.

Der Rsync Befehl kann z.B. auch durch SCP ersetzt werden, wenn das Git Repository nicht auf dem Puppet Master liegt.

 

Weiter: Puppet Agent