IT Engineering – Continuous Delivery
Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet
Alexander Pacnik
Karlsruhe, 20.05.2014
2
Ziele ‣ Continuous Delivery – einfache, atomare Änderungen sollten immer möglich sein
Voraussetzung ‣ Dev/Prod Parity – Werkzeuge und Prozesse der Umgebungen identisch halten
‣ Vollständige Automatisierung der Prozesse und Tests
‣ Infrastructure as Code
Einleitung ... worum es in diesem Vortrag geht
3
Problemstellung ‣ Entwicklungsumgebung für Operations zur Verfügung stellen
‣ Entwicklungsumgebung für Development zur Verfügung stellen
‣ Ein (!) Tool pro Aufgabe festlegen – heute Image Verwaltung mit Packer
‣ Entscheidungskriterien : Wer nutzt es? Wie wird es verwendet?
‣ Teil der DoD und für alle Beteiligten verbindlich
Einleitung ... worum es in diesem Vortrag geht
Virtualisierung
4
Virtualisierung ... die Basis für unsere Boxen
Development Environments
(Vagrant)
Image Creation (Packer)
Hands-on Code
5
VirtualBox ‣ Virtualisierungslösung die auf OSX, Linux und Windows funktioniert
‣ Vorteil: nur ein Host Betriebssystem das berücksichtigt / getestet werden muss
‣ Console: VBoxManage
‣ Installation: Installer
Quellen ‣ VirtualBox: https://www.virtualbox.org
Virtualisierung ... mit VirtualBox
6
VMware Fusion ‣ Virtualisierungslösung für OSX
‣ Vorteil: Bessere Integration in die VMware Welt
‣ Console: vmrun (steuern) und ovftool (konvertieren)
‣ Installation: Installer
Quellen ‣ VMware Fusion: http://www.vmware.com/de/products/fusion
‣ VMware Tools Versionen: http://packages.vmware.com/tools/versions
‣ OVF Tool: https://www.vmware.com/support/developer/ovf/
Virtualisierung ... mit VMware Fusion
Virtualisierung (VirtualBox)
7
Image Bauen ... mit Packer
Development Environments
(Vagrant)
Image Creation (Packer)
Hands-on Code
http://www.packer.io/intro/index.html 8
Was ist Packer? ‣ Packer is an open source tool for creating identical machine images for multiple
platforms from a single source configuration.
Image Bauen ... eine Einführung
http://www.packer.io/intro/index.html 9
Installation ‣ Archiv herunterladen und auspacken
‣ Binaries in den PATH aufnehmen
Image Bauen ... einfache Installation
http://www.packer.io/docs/basics/terminology.html 10
Terminologie ‣ Artifacts – das Ergebnis eines Builds (Image)
‣ Templates – JSON Datei die die ganze Konfiguration enthält
‣ Builders – Konfiguration für eine bestimmte Plattform (Virtualbox, AWS, ...)
‣ Post-processors – Schritte nach einem Build (Artefakte hochladen / komprimieren)
‣ Provisioners - installieren Software in die laufende VM (Shell, Puppet, Chef, ...)
‣ Kickstart / Preseeding – Konfigurationsdatei für die OS Installation
Image Bauen ... die wichtigsten Begriffe
http://www.packer.io/docs/templates/configuration-templates.html 11
Templates ‣ Alles zwischen { ... } in der JSON Datei
‣ {{.VAR}} Variablen beginnen mit einem Punkt und werden groß geschrieben
‣ {{timestamp}} build-in Funktionen werden klein geschrieben
Image Bauen ... Templates schreiben
http://www.packer.io/docs/templates/configuration-templates.html 12
Variablen in Templates ‣ Werden in einen "variables": { ... } eingeschlossen, Definition: “key“: “value“
‣ Value = ““ entspricht einer Variable die optional übergeben werden kann
‣ Value = null führ zu einem Validate-Fehler wenn die nicht gesetzt wird
‣ Im Template werden sie wie folgt verwendet: "{{user `key`}}“
‣ Umgebungsvariablen können auch ausgelesen werden: "{{env `LANG`}}
‣ Variablen können über die CMD übergeben oder aus einer Datei ausgelesen werden
‣ Beispiel:
Image Bauen ... Templates schreiben
13
Provisioners ‣ Starten Skripte (Shell, Puppet, ...) in der laufenden VM
‣ Können auf Builds eingeschränkt werden (nur für Vagrant ausführen, etc)
‣ Können für einzelne Builds überschrieben werden um Unterschiede abzubilden
Image Bauen ... Provisioners
14
Debugging ‣ Viele Builder unterstützen "headless": "false“
‣ Am Ende der Skripte ein Sleep einbauen und SSH in die Maschine
‣ Umgebungsvariable PACKER_LOG auf irgendeinen Wert setzen
Image Bauen ... Debugging wenn Fehler auftreten
Virtualisierung (VirtualBox)
16
Development Environments ... das Image einfach nutzbar machen
Development Environments
(Vagrant)
Image Creation (Packer)
Hands-on Workflow
17
Vagrant ‣ Verwaltung virtueller Entwicklungsumgebungen
‣ Vorteil: einfach ganze lokale Umgebungen als Code zu beschreiben und zu teilen
‣ Console: vagrant
‣ Installation: Installer
Quellen ‣ Vagrant: http://www.vagrantup.com
Development Environments ... das Image einfach nutzbar machen
Virtualisierung (VirtualBox)
19
Hands-on ... der Workflow
Development Environments
(Vagrant)
Image Creation (Packer)
Hands-on Code
21
Konfigurationen prüfen und ggf. anpassen ‣ Umgebung: build_images/conf/build_images.properties
‣ Template: build_images/templates/centos/centos65-config.json
‣ Kickstart: build_images/templates/centos/public_html/centos6.cfg
Hands-on ... die Konfiguration für unsere Box anpassen
22
Antfile ‣ Optional: Bash Funktion erstellen um Antfiles direkt ausführen zu können
‣ $EDITOR ~/.profle
Hands-on ... die Arbeit mit Ant vereinfachen
24
Download ‣ Die ISOs die in den Templates verwendet werden konfigurieren
build_images/conf/images.conf
‣ Konfigurierte ISOs herunterladen
‣ Anschließend die md5 Summe berechnen und in der Konfiguration eintragen
build_images/templates/centos/centos65-config.json
Hands-on ... das ISO für die Installation herunterladen
26
packer inspect ‣ Elemente und Konfiguration der JSON Datei anzeigen
Hands-on ... die Konfiguration anzeigen
27
Kickstart / Preseeding ‣ Passend zum Projekt die Kickstart / Preseeding Datei anpassen
‣ OS Version
‣ Sprache und Zeitzone
‣ Partitionierungsschema
‣ ...
‣ Beispiel: build_images/templates/centos/public_html/centos6.cfg
Hands-on ... die Konfiguration anzeigen
28
packer build ‣ Box mit angegeben Typ bauen und optional Puppet ausführen
Hands-on ... die Box bauen
29
Skripte ‣ Die Basisinstallation nach Kickstart / Preseeding erfolgt mit Shell Skripten
‣ Beispielsweise alles für den ersten Puppet Run vorbereiten
Hands-on ... die laufende VM konfigurieren
30
Konventionen für das Verwenden von Puppet ‣ Packer liegt unter build_images/
‣ Puppet Module liegen unter configuration/modules/
‣ Hieradata liegt unter configuration/hieradata/
‣ Modul das angewendet werden soll hat ein Manifest unter tests/init.pp
‣ Der Packer Code: scripts/puppet_apply.sh
Hands-on ... eine mögliche Puppet Integration
31
list ‣ Alle Vagrant Boxen im „work/cache_boxes“ Verzeichnis anzeigen
Hands-on ... Boxen anzeigen und ...
32
publish_local ‣ Die angegebene Box lokal (vagrant add) hinzufügen
Hands-on ... Box lokal Vagrant bekannt machen oder ...
33
publish_remote ‣ Die angegebene via scp hochladen
Hands-on ... Box auf einen Webserver für Vagrant ablegen
34
vmware2ova / vbox2ova ‣ Box-Datei aufräumen, so dass ein Standard konformes OVA entsteht
‣ vbox2ova: metadata.json aus box entfernen
‣ vmware2ova: box mit OVF Tool konvertieren
‣ Die Datei kann dann in eine Virtualisierungslösung importiert werden
Hands-on ... Box konvertieren um sie ohne Vagrant verwenden zu können
35
Box testen 1. VirtualBox / VMware Fusion – OVA Datei importieren (UI oder Console)
2. Mit Vagrant die Box nach dem publish_local testen
Hands-on ... um die Übersicht zu behalten
36
Fazit ‣ Entwicklungsmaschinen so nah wie möglich an den produktiven bauen
‣ Immer ein Image für Engineering Tests bereit halten (minimales Golden Image)
‣ Entwicklern immer ein Image für die Entwicklung zur Verfügung stellen
‣ Erfolgskriterium: Wenn die Vagrant Box und das Deployment Tool von Dev verwendet wird, haben wir die richtige Lösung gefunden.
‣ Überall die gleichen Tools für Configuration und Deployment verwenden
‣ Die einfachste Lösung verwenden die funktioniert
Hands-on ... um die Übersicht zu behalten
37
Next Steps 1. Tools installieren
2. Beispiel aus unserem Git Server clonen
3. Skripte ausprobieren, Beteiligung an der Weiterentwicklung erwünscht! J
4. Dokumentation der Tools vollständig lesen!
Hands-on ... um die Übersicht zu behalten
38
Vielen Dank für Ihre Aufmerksamkeit
Kontakt Alexander Pacnik IT Engineering & Operations Project Management inovex GmbH Ludwig-Erhard-Allee 6 76133 Karlsruhe Mobil: +49 (0)173 3181 040 Mail: [email protected]