continuous delivery - development tool chain - virtualisierung, packer, vagrant und puppet

40
IT Engineering – Continuous Delivery Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet Alexander Pacnik Karlsruhe, 20.05.2014

Upload: inovex-gmbh

Post on 27-May-2015

167 views

Category:

Technology


8 download

TRANSCRIPT

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

15

Beispiel:

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

18

Beispiel: Vagrantfile

Development Environments ... das Image einfach nutzbar machen

Virtualisierung (VirtualBox)

19

Hands-on ... der Workflow

Development Environments

(Vagrant)

Image Creation (Packer)

Hands-on Code

20

Übersicht

Hands-on ... die Verzeichnisstruktur

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

23

Antfile ‣  die wichtigsten Actions

Hands-on ... der Workflow im Überblick

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

25

packer validate ‣  JSON Datei auf syntaktische Korrektheit prüfen

Hands-on ... Syntax prüfen

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]

Anhang

40

Quellen ‣  VirtualBox

https://www.virtualbox.org/wiki/Documentation

‣  VMware Fusion

http://www.vmware.com/de/products/fusion

‣  Packer

http://www.packer.io/docs

‣  Vagrant

http://docs.vagrantup.com/v2/

Lizenz des Vortrags ‣  Creative Commons (by-nc-nd)

Anhang ... wo sie in Ruhe nachlesen können