Jeder Entwickler im Team hatte ein anderes Betriebssystem, eine andere Java-Version, einen anders konfigurierten Tomcat. Das Ergebnis? „Works on my machine” wurde zu unserem inoffiziellen Motto. Dann entdeckten wir Vagrant und alles änderte sich.
Das Problem: Snowflake-Umgebungen¶
In einem Team von zwölf Entwicklern hatten wir mindestens fünf verschiedene Konfigurationen. Jemand auf Windows 7, jemand auf Windows 8, zwei Kollegen auf Ubuntu, einer auf Fedora. Jeder hatte eine andere JDK-Version, andere Umgebungsvariablen, einen anderen Weg, die lokale Datenbank zu starten. Das Onboarding eines neuen Kollegen dauerte zwei Tage — zwei Tage Umgebung einrichten, richtige Bibliotheksversionen finden, mysteriöse Fehler lösen.
Vagrant: Eine virtuelle Maschine als Code¶
Vagrant von HashiCorp ermöglicht es, eine Entwicklungsumgebung in einer einzigen Datei zu beschreiben — dem Vagrantfile. Es ist eine Ruby-DSL, aber man muss kein Ruby können. Ein paar Zeilen und man hat eine virtuelle Maschine mit exakt definierter Software.
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 5432, host: 5432
config.vm.provision "shell", path: "provision.sh"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
end
Das Provisioning-Skript installiert JDK 7, Tomcat 7, PostgreSQL 9.3 und Maven 3.1 — genau die Versionen, die wir brauchen. Keine Überraschungen, keine Abweichungen. Ein neuer Entwickler kommt, klont das Repo, führt vagrant up aus und hat innerhalb von 10 Minuten eine laufende Umgebung.
Multi-Machine-Setup¶
Für komplexere Projekte ermöglicht Vagrant die Definition mehrerer Maschinen in einem Vagrantfile. Jede Maschine hat ihre eigene IP in einem privaten Netzwerk. Damit simulieren wir die Produktionstopologie lokal — Anwendungsserver + Datenbankserver + Message Broker.
Geteilte Ordner verknüpfen den Quellcode vom Host-System in die VM. Der Entwickler schreibt Code in seiner bevorzugten IDE auf dem Host; die Kompilierung findet in der VM statt.
Provisioning: Shell vs. Chef vs. Puppet¶
Vagrant unterstützt mehrere Provisioner. Wir begannen mit einem Shell-Skript — für jeden verständlich. Wichtig ist, dass das Provisioning idempotent ist — man kann es mehrfach ausführen, ohne Nebenwirkungen. Wenn eine neue Abhängigkeit hinzukommt, genügt ein vagrant provision und alle haben sie.
Probleme¶
Performance: VirtualBox auf älteren Laptops läuft langsam. Geteilte Ordner über Guest Additions sind langsam — NFS ist besser, funktioniert aber unter Windows nicht einfach. Box-Größe: Über ein Gigabyte; der Download dauert. Docker vs. Vagrant: Wir hören von Docker und fragen uns, ob Container VMs ersetzen werden. Vorerst sind es komplementäre Werkzeuge.
Vagrant hat uns Hunderte Stunden gespart¶
Seit der Einführung von Vagrant ist das Onboarding eine Sache von Minuten, nicht Tagen. Alle arbeiten auf einer identischen Umgebung. Wenn Ihr Team größer als zwei Personen ist, ist Vagrant eine Investition, die sich am ersten Tag auszahlt.
Brauchen Sie Hilfe bei der Implementierung?
Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.
Kontaktieren Sie uns