Build Patterns
BEST PRACTICES UND PATTERNS FÜR BUILD KONFIGURATIONEN
Ralf Abramowitsch


Senior Software Development Engineer @ Vector Informatik GmbH



Dozent: Software-Entwicklung mit .N...
Agenda


Einführung



Build Patterns



Build-Skelett



Ablagen-unabhängige Build-Skripte



Infrastruktur-unabhän...
Einführung
Einführung zu Patterns


Patterns wurden für architektonische Konzepte von
Christopher Alexander et al. entwickelt.



"...
Einführung zu Build Patterns
Beautiful Builds


Autor: Roy Osherove



Aktueller Stand: 30% fertig



https://leanpub.c...
Build Script Injection
Build Script Injection
Problem


CI-Prozess ist etabliert und Produkte können gebaut werden



Build-Abläufe sind in der...
Build Script Injection
Projektstruktur zu Zeitpunkt A
(Produktversion 1.0)
Project 1
Bin
Source
Project 2

Projektstruktur...
Build Script Injection
Project 1
Bin
Source
Project 2

Bin
BuildKonfiguration

Source
Setup
Utils
Unter
Versionskontrolle
Build Script Injection
Lösung


Aufteilen der Build-Konfiguration in 2 Teile:


Ein Script, das im Umfeld der Build-Konf...
Build Script Injection
Statischer Anteil

Dynamischer Anteil
Project 1
Bin
Source

Project 2
BuildKonfiguration

Bin

Buil...
Build-Skelette
Build Skelette
Problem


Arbeiten an einem Produkt laufen bereits auf Hochtouren



Mit Buildautomatisierung wurde noch ...
Build Skelette
Lösung


Zu Beginn eines Projekts gleich mit der Buildautomatisierung beginnen


Leeres Entwicklungsproje...
Build Skelette
Vorteile


Build-Prozess existiert von Anfang an



Einfach Anpassungen möglich



Schnelles Feedback
Build Skelette
Bestandteile des “Build Skeletts”



Ein Build Skript (unter Versionskontrolle) zum Kompilieren des Quellc...
Ablagen-unabhängige Skripte
Ablagen-unabhängige Skripte
Problem


Build-Skripte laufen nur auf dem lokalen Rechner



Inbetriebnahme eines CI-System...
Ablagen-unabhängige Skripte
Lösung


Relative Pfade anstelle absoluter Pfade



Build-Skript steht unter Versionskontrol...
Infrastruktur-unabhängige Skripte
Infrastruktur-unabhängige Skripte
Problem


Build-Skripte müssen an vielen Stellen angepasst werden, nur weil
sich eine S...
Infrastruktur-unabhängige Skripte
Lösung


Skript Variablen




Beispiel: Name der Build-Konfiguration

Skript Konfigur...
Infrastruktur-unabhängige Skripte
Mögliche Seiteneffekte



Erschweren des Debuggens von Skript-Problemen


Umgebungsvar...
Kumulative Builds
Kumulative Builds
Problem


Builds dauern sehr lange, bis sie vollständig durchgelaufen sind



Build-Konfiguration enth...
Kumulative Builds
Lösung


Build-Konfigurationen sind oft ähnlich



Erstellen einer Pipeline


Wiederverwenden der Bui...
Kumulative Builds
Ausgangssituation: Continuous Integration Build
Source Code
auschecken

Debug Targets
bauen

Ausführen v...
Kumulative Builds
Ausgangssituation: Nightly Build
Source Code
auschecken

Debug Targets
bauen

Ausführen aller
Tests auf
...
Kumulative Builds
Ausgangssituation: Release Build
Source Code
auschecken

Debug Targets
bauen

Ausführen aller
Tests auf
...
Kumulative Builds
Zielsituation: Continuous Integration Build
Source Code
auschecken

Debug Targets
bauen

Ausführen von
K...
Kumulative Builds
Zielsituation: Nightly Build
Source Code
auschecken

Debug Targets
bauen

Ausführen von
Kurz-Tests auf
D...
Kumulative Builds
Zielsituation: Release Build
Debug Targets
bauen

Ausführen von
Kurz-Tests auf
Debug-Target

Holen der B...
Gated Commits
Gated Commits
Problem


Entwickler wissen nicht, was passiert, wenn sie ihren Code
committen


Bricht der Code den aktue...
Gated Commits
Problem

Code schreiben

Einchecken

Build

Fehlersuche

Build
ok?

Ja
Bugfix
vorhanden
Nein

Team blockiert...
Gated Commits
Code schreiben

„Gated Commit“
anfordern

Entwickler Code
Snapshot wird an
Server übertragen

Snapshot wird ...
Zusammenfassung


Build Patterns und Best Practices optimieren den Build Prozess


Erhöhte Wartbarkeit



Kürzere Ausfü...
Vielen Dank für Ihre Aufmerksamkeit
Nächste SlideShare
Wird geladen in …5
×

Build Patterns - Patterns und Best Practices für den Build Prozess

1.637 Aufrufe

Veröffentlicht am

Mein Vortrag auf der Konferenz "Continuous Lifecycle 2013" am 12.11.2013 in Karlsruhe: Build Patterns - Patterns und Best Practices für den Build Prozess.
Dabei wurden insgesamt 6 Buildpatterns vorgestellt: Build Script Injection, Build-Skelett, Ablagen-unabhängige Build-Skripte, Infrastruktur-unabhängige Build-Skripte, Kumulative Builds und Gated Commits. Alle Patterns basieren auf dem Buch "Beautiful Builds" von Roy Osherove.

0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.637
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
7
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Build Patterns - Patterns und Best Practices für den Build Prozess

  1. 1. Build Patterns BEST PRACTICES UND PATTERNS FÜR BUILD KONFIGURATIONEN
  2. 2. Ralf Abramowitsch  Senior Software Development Engineer @ Vector Informatik GmbH  Dozent: Software-Entwicklung mit .NET @ DHBW Stuttgart  Kontakt  E-Mail: ralf@abramowitsch.de  Blog: http://blog.abramowitsch.de  Twitter: @minibrain81
  3. 3. Agenda  Einführung  Build Patterns   Build-Skelett  Ablagen-unabhängige Build-Skripte  Infrastruktur-unabhängige Build-Skripte  Kumulative Builds   Build Script Injection Gated Commits Zusammenfassung
  4. 4. Einführung
  5. 5. Einführung zu Patterns  Patterns wurden für architektonische Konzepte von Christopher Alexander et al. entwickelt.  "Each pattern is a three-part rule, which expresses a relation between..   a problem,   a certain context, and a solution" (Alexander et al. 1977). Patterns beschreiben Best Practices, erklären gute Designs, so dass diese Lösungen leicht wiederverwendet werden können. http://en.wikipedia.org/wiki/File:A_Pattern_Language.jpg
  6. 6. Einführung zu Build Patterns Beautiful Builds  Autor: Roy Osherove  Aktueller Stand: 30% fertig  https://leanpub.com/build
  7. 7. Build Script Injection
  8. 8. Build Script Injection Problem  CI-Prozess ist etabliert und Produkte können gebaut werden  Build-Abläufe sind in der Build-Konfiguration hinterlegt  Build-Konfigurationen werden an aktuelle Anforderungen angepasst und immer gleich nachgezogen  Alte Produktversion muss gebaut werden, zu der die neue BuildKonfiguration nicht passt  Build schlägt fehl
  9. 9. Build Script Injection Projektstruktur zu Zeitpunkt A (Produktversion 1.0) Project 1 Bin Source Project 2 Projektstruktur zu Zeitpunkt B (Produktversion 2.0) Bin Source Project 1 Project 2 Bin Setup Source Utils Setup Utils
  10. 10. Build Script Injection Project 1 Bin Source Project 2 Bin BuildKonfiguration Source Setup Utils Unter Versionskontrolle
  11. 11. Build Script Injection Lösung  Aufteilen der Build-Konfiguration in 2 Teile:  Ein Script, das im Umfeld der Build-Konfiguration abgelegt ist   Sehr statische und "dumme" Skripte Ein Script, das unter SourceCode-Verwaltung steht  Script-Änderungen sind passend zur Produkt-Version  Script ist passend zu Aktionen und zur aktuellen Struktur von Dateien (typischerweise relative Pfade)  Entwickler sollten vollen Zugriff auf diese Skripte haben
  12. 12. Build Script Injection Statischer Anteil Dynamischer Anteil Project 1 Bin Source Project 2 BuildKonfiguration Bin Build-Skript Source Setup Utils Unter Versionskontrolle
  13. 13. Build-Skelette
  14. 14. Build Skelette Problem  Arbeiten an einem Produkt laufen bereits auf Hochtouren  Mit Buildautomatisierung wurde noch nicht oder nur teilweise begonnen  Je weiter das Projekt voranschreitet, um so  mehr Schritte müssen manuell vorgenommen werden und  eine Build-Automatisierung wird immer schwerer
  15. 15. Build Skelette Lösung  Zu Beginn eines Projekts gleich mit der Buildautomatisierung beginnen  Leeres Entwicklungsprojekt (z.B. Visual Studio Solution) anlegen  Buildskript erstellen  Leeres Test-Projekt erstellen und in CI-Prozess einbauen  Deploy-Cycle einrichten
  16. 16. Build Skelette Vorteile  Build-Prozess existiert von Anfang an  Einfach Anpassungen möglich  Schnelles Feedback
  17. 17. Build Skelette Bestandteile des “Build Skeletts”  Ein Build Skript (unter Versionskontrolle) zum Kompilieren des Quellcodes  Continuous Integration Server  Buildkonfiguration “CI”: Führt bei Code-Änderungen (Check-Ins) das Build-Skript aus  Buildkonfiguration “Deploy”: Deploy-To-Test oder Deploy-To-Production
  18. 18. Ablagen-unabhängige Skripte
  19. 19. Ablagen-unabhängige Skripte Problem  Build-Skripte laufen nur auf dem lokalen Rechner  Inbetriebnahme eines CI-Systems wird sehr aufwändig   Spezielle Build-Ordner  Bibliotheken müssen an bestimmte Ordner kopiert werden   Laufwerke mounten Etc. … Build-Skript hat spezielle Anforderungen an die Umgebung in der es ausgeführt wird
  20. 20. Ablagen-unabhängige Skripte Lösung  Relative Pfade anstelle absoluter Pfade  Build-Skript steht unter Versionskontrolle (Repository)  Bibliotheken, Tools usw. im (separaten) Repository
  21. 21. Infrastruktur-unabhängige Skripte
  22. 22. Infrastruktur-unabhängige Skripte Problem  Build-Skripte müssen an vielen Stellen angepasst werden, nur weil sich eine Stelle ändert  Beispiele    Name der Maschine, auf die deployed wird, ändert sich Neben Release-Targets sollen nun auch Debug-Targets gebaut werden Verletzung des „Single-Source“-Prinzips  Name der Build-Konfiguration erscheint mehrfach im Skript
  23. 23. Infrastruktur-unabhängige Skripte Lösung  Skript Variablen   Beispiel: Name der Build-Konfiguration Skript Konfigurationsdatei  Sammlung mehrerer Skript Variablen  Vorteil: Alle Variablen an zentraler Stelle  Umgebungsvariablen  Skript Parameter
  24. 24. Infrastruktur-unabhängige Skripte Mögliche Seiteneffekte  Erschweren des Debuggens von Skript-Problemen  Umgebungsvariablen müssen gut dokumentiert sein  Lokaler Build könnte fehlschlagen, wenn nicht alle Voraussetzungen (Variablen, …) gesetzt sind
  25. 25. Kumulative Builds
  26. 26. Kumulative Builds Problem  Builds dauern sehr lange, bis sie vollständig durchgelaufen sind  Build-Konfiguration enthält zu viele Schritte  Alle Schritte sind wichtig und können nicht übersprungen werden
  27. 27. Kumulative Builds Lösung  Build-Konfigurationen sind oft ähnlich  Erstellen einer Pipeline  Wiederverwenden der Build-Artefakte
  28. 28. Kumulative Builds Ausgangssituation: Continuous Integration Build Source Code auschecken Debug Targets bauen Ausführen von Kurz-Tests auf Debug-Target
  29. 29. Kumulative Builds Ausgangssituation: Nightly Build Source Code auschecken Debug Targets bauen Ausführen aller Tests auf Debug-Target Release Targets bauen Ausführen aller Tests auf Release-Target Erzeugen von CodeDoku, Installern, … Deployment auf Test-Umgebung
  30. 30. Kumulative Builds Ausgangssituation: Release Build Source Code auschecken Debug Targets bauen Ausführen aller Tests auf Debug-Target Release Targets bauen Ausführen aller Tests auf Release-Target Deployment auf ProductionUmgebung
  31. 31. Kumulative Builds Zielsituation: Continuous Integration Build Source Code auschecken Debug Targets bauen Ausführen von Kurz-Tests auf Debug-Target
  32. 32. Kumulative Builds Zielsituation: Nightly Build Source Code auschecken Debug Targets bauen Ausführen von Kurz-Tests auf Debug-Target Build-Artefakte aus dem CIBuild hoen Release Targets bauen Ausführen aller Tests auf Release-Target Erzeugen von Installern Deployment auf Test-Umgebung
  33. 33. Kumulative Builds Zielsituation: Release Build Debug Targets bauen Ausführen von Kurz-Tests auf Debug-Target Holen der BuildArtefakte aus CI-Build Release Targets bauen Ausführen aller Tests auf Release-Target Holen der BuildArtefakte aus Nightly-Build Deployment auf ProductionUmgebung Source Code auschecken Erzeugen von CodeDoku, Installern, …
  34. 34. Gated Commits
  35. 35. Gated Commits Problem  Entwickler wissen nicht, was passiert, wenn sie ihren Code committen  Bricht der Code den aktuellen Build?  Funktionieren nach dem Commit noch alle Tests?  „Blindes“ Committen
  36. 36. Gated Commits Problem Code schreiben Einchecken Build Fehlersuche Build ok? Ja Bugfix vorhanden Nein Team blockiert Nein Ja
  37. 37. Gated Commits Code schreiben „Gated Commit“ anfordern Entwickler Code Snapshot wird an Server übertragen Snapshot wird mit Master Source Version gemerged Build-Konfiguration wird ausgeführt Nein Benachrichtigung des Entwicklers Aufräumen & Bereitstellen von Logfiles etc. Build ok? Ja Code wird in Master Branch committed
  38. 38. Zusammenfassung  Build Patterns und Best Practices optimieren den Build Prozess  Erhöhte Wartbarkeit  Kürzere Ausführungszeiten & schnelleres Feedback  Erhöhte Qualität im Entwicklungsprozess
  39. 39. Vielen Dank für Ihre Aufmerksamkeit

×