Grundlagen der Continuous Integration
mit
serverundJenkins
Zend Blueprint für Continuous Delivery
von Slavey Karadzhov
Zend Technologies, Inc. · www.zend.com 2
Grundlagen der Continuous Integration mit Jenkins und Zend Server
EinführungContinuous Delivery ist eine Methodologie, eine Änderung der Denkweise und eine Führungspraxis, die sich darauf konzentriert, während des gesamten Lebenszyklus der Softwareapplikation eine schnelle Applikationsbereitstellung und -auslieferung zu erreichen. Dies benötigt die Einführung von Automatisierung, um in der Software-Auslieferungspipeline manuelle Prozesse zu optimieren und Konsistenz und Wiederholbarkeit sowie eine verbesserte Zusammenarbeit und gemeinsame Metriken und Prozesse über Dev- und Ops-Teams hinweg durchzusetzen. [1]
Eine der grundlegenden Anforderungen für das Errichten von Continuous Delivery ist die Implementierung eines automatisierten Continuous Integration-Systems, mit dem die Applikation, angefangen von den Codekomponenten und -ressourcen bis hin zu einem deploymentfähigen Paket, automatisch und konsistent erstellt wird.
In diesem Papier werden die Schritte und Vorteile der Implementierung eines Continuous Integration-System unter Verwendung von Jenkins und der Zend Server Continuous Delivery-Plattform demonstriert.
Der Zend Blueprint für Continuous DeliveryZends Blueprint für Continuous Delivery schreibt Best Practices für die Implementierung der einzelnen Schritte des Zyklus der Softwarebereitstellung und -auslieferung fest und bietet Pattern, die mit Zend Server, (Zends Plattform für Continuous Delivery von PHP-Applikationen) integriert sind und dabei helfen, diese Best Practices zu implementieren.
Der Blueprint bietet Richtlinien zur zugrunde liegenden Infrastruktur, die erstellt werden muss, um optimale Ergebnisse zu liefern. Das Ziel ist es, praktische Ansätze zu implementieren, die jeden Schritt im Prozess beschleunigen und stärken, um Applikationen schneller vom Code in die Produktion zu bringen.
Dieses Modell für Continuous Delivery basiert auf praktischen Implementierungskonzepten, die über die Erfahrung des Zend Professional Services-Teams bei der Arbeit mit zahlreichen großen und kleinen Kunden gesammelt wurden.
Der Blueprint für Continuous Delivery
Versions-kontrolle
Continuous IntegrationInfrastruktur-
automatisierungRelease-
Automatisierung
Qualitätskontrolle &
Genehmigungen
Applikations-
ManagementBuild Codequalität Packaging
Entwickler, die
in Zweigen
arbeiten. Lösen CI
bei Zusammen-
führung in Master-
Hauptzweig/-
stamm aus
Erfassen und
Organisieren
von
Applikations-
artefakten und
-abhängigkei-
ten
Ausführen
von Unit-Tests
und statischen
Tools für die
Codeanalyse, um
die Codequalität
sicherzustellen
Zusammenstellen
von Applikations-
artefakten,
einschl.
Abhängigkeiten &
Konfiguration, in
ein deploybares,
validiertes
Package
Automatisierte
Bereitstellung
von Infrastruktur-
ressourcen &
Plattformen
Automatisiertes
Applikations-
deployment
über alle
Laufzeitumgebung-
en hinweg
Projektspezifische
funktionelle Tests
& Freigabe für die
Produktion
Bereitstellung
von sofortigem
Feedback und
Diagnosen
zur deployten
Applikation für
Entwicklungs-
und Operations-
Teams
Erfahren Sie mehr über den Blueprinthttp://www.zend.com/de/solutions/continuous-delivery
Der Blueprint für die Continuous Delivery
Zend Technologies, Inc. · www.zend.com 3
Grundlagen der Continuous Integration mit Jenkins und Zend Server
Continuous Integration: Die Grundlagen
Ein Hauptprinzip eines Continuous Delivery Ansatzes ist, dass die Applikation immer bereit für die Produktivumgebung ist. Dies bedeutet, dass alle zum Erstellen der Applikation erforderlichen Artefakte in einem Versionskontrollsystem gespeichert und verwaltet werden, und dass Code konsistent und regelmäßig in die Quell-Hauptlinie eingecheckt wird, um kleine Erweiterungen zwischen Builds zu gewährleisten. Im Grunde muss der Code in der Hauptlinie kontinuierlich bereit für die Produktivumgebung sein.
Es gibt drei wichtige und grundlegende Elemente, die jedes Continuous Integration-System unterstützen.
1. 1. Verpflichtung zu Building-Tests. Dies ist das erste der wichtigsten Elemente. Die Verpflichtung des Entwicklungsteams, eine umfassende Testsuite auf Unit- und Funktionsebene zusammen mit ihrem Code herzustellen. Dies ist wichtig, um das ‘garantierte’ Niveau an Codequalität zu erreichen, das jederzeit produktionsbereit sein kann.
2. 2. Den Build niemals abbrechen. Das Ziel ist, dass die Applikation bereit sein muss, bei jeder eingereichten Änderung erstellt, gepackt und deployt werden zu können. Dies bedeutet natürlich, dass beschädigter oder nicht getesteter Code niemals eingereicht werden sollte.
3. Versionskontrolle. Ein weiteres grundlegendes Element für die Continuous Integration ist die Versionskontrolle. Um sich auf die Implementierung der Continuous Integration konzentrieren zu können, muss der Code unter Verwendung strikter Richtlinien für die Versionskontrolle verwaltet werden.
Wenn der Code stets produktionsbereit ist und durch strikte Richtlinien für die Versionskontrolle verwaltet wird, und das Entwicklungsteam eine agile Praxis für die Entwicklung und das Unit-Testing übernommen hat, können Organisationen damit beginnen, eine Continuous Integration-Umgebung zu implementieren.
Anschließend kann jede individuelle Phase im Continuous Delivery-Blueprint implementiert werden, um den Continuous Delivery-Workflow zu vervollständigen. Das folgende Sequenzdiagramm enthält den empfohlenen Ablauf der Schritte in einem Continuous Delivery-Workflow.
Einchecken des neuen Codes
Einchecken des Fixes
Einchecken des Fixes
Continuous
Continuous
Auslösen
Feedback
Diagnose
Feedback aus der Produktivumgebung und Diagnosen Genehmigung
Source-ControlContinuous Integration
Unit-Tests des Builds
Automatisierte Akzeptanztests
Benutzer-AkzeptanztestsPackaging &
Deployment
Entw
ickl
er
Fehler
Fehler
Integration auslösen
Integration auslösen
Auslösen
Automatisierte Tests auslösen
Bereitstellungsumgebung und Deployment der Applikation
AuslösenBereitstellung in der Produktion Produktivumgebung
Der Continuous Delivery Workflow
Zend Technologies, Inc. · www.zend.com 4
Grundlagen der Continuous Integration mit Jenkins und Zend Server
Continuous Integration Der Continuous Integration Ansatz wurde entwickelt, um eine Automatisierungsumgebung zu erstellen, in der sichergestellt ist, dass alle Änderungen an der Applikation zu einer releasefähigen Version führen und dass jede Version auf Knopfdruck automatisch erstellt werden kann. Auf übergeordneter Ebene hat Continuous Delivery das Ziel, den gesamten End-to-End-Releaseprozess dieser Applikation berührungslos zu machen (zu automatisieren), wobei die erstellte Applikation (aus dem Continuous Integration-System) regelmäßig in die Test- und anschließend in die Produktivumgebungen geliefert wird. Das Ziel des Continuous Delivery-Zyklus ist es, Konsistenz und hohe Qualität zu gewährleisten, indem schnelles benutzerzentriertes Feedback zur Verfügung gestellt wird. [2] Continuous Integration ist ein wesentlicher Bestandteil der Continuous Delivery.
Das Ziel der Continuous Integration ist es, üblicherweise manuell ausgeführte Abschnitte im Entwicklungspro-zess der Applikation zu automatisieren, indem eine voll funktionsfähige Version der Software das erste Mal aus der Entwicklung in die Systemintegrations- und die Integrationstestphase verschoben wird.
Mit Continuous Integration werden Applikationen in einer sehr frühen Phase im Entwicklungsprozess in bestimmten Intervallen oder bei allen von den Entwicklern eingecheckten Änderungen erstellt. Dadurch wird die Notwendigkeit von Integrationstests und die Kosten im Zusammenhang mit der Zeit, die Entwickler in dieser Phase aufwenden, effektiv eliminiert. Dank der Möglichkeit der regelmäßigen stufenweisen Builds und der Anordnung eines umfassenden, automatisierten Testprozesses können Entwickler außerdem Probleme früh erkennen und als Folge eine höhere Applikationsqualität sicherstellen.
Um einen typischen Continuous Integration-Workflow darzustellen, nehmen Sie folgendes Szenario an:
Siehe Abbildung auf der nächsten Seite
1. Während der Entwicklung der Applikation arbeiten die Entwickler an ihren lokalen Computern, und sobald sie bereit sind, ihre neuen Codeänderungen zu übermitteln, reichen sie sie in ein zentrales Quellcode-Repository ein. Im untenstehenden Diagramm ist das Source Control Management- (oder Versionskontroll-) System ein Git-Repository.
2. Wenn der Code in die Hauptlinie eingecheckt wird (oder der Release-Manager Codeänderungen von einem der Entwickler zusammenführt), löst das Hinzufügen des neuen Codes zum Hauptzweig ein neues Release aus.
3. Das Continuous Integration-System (Jenkins in diesem Fall) überwacht das Versionskontrollsystem auf Änderungen und startet den Build-Prozess. Der Continuous Integration-Server erhält den Quellcode aus dem Repository.
4. Der Continuous Integration-Server erhält den Quellcode aus dem Repository.
5. Der Continuous Integration-Server führt Unit-Tests aus, um die Qualität zu validieren.
6. Der Continuous Integration-Server packt die Dateien in verteilbare Einheiten, deployt das Package auf einen Testserver und validiert das Package und die Grundfunktionalität, indem automatisierte Funktionstests ausgeführt werden können.
7. Der Continuous Integration-Server deployt dasselbe Package in die Testumgebungen, so dass ausführliche Benutzerakzeptanztests ausgeführt werden.
8. Sobald die Akzeptanztests erfolgreich sind, wird dasselbe Package auf den Produktionsservern deployt. Das Implementieren einer Infrastruktur- und Release-Automatisierung ermöglicht die End-to-End-Automatisierung sowie die Bereitstellung und das Deployment der Applikationspackages auf allen Servern mit einem Mausklick.
Zend Technologies, Inc. · www.zend.com 5
Grundlagen der Continuous Integration mit Jenkins und Zend Server
Vorteile der Zend Server- und Jenkins-IntegrationBei der Integration mit Jenkins ermöglicht Zend Server einen komplett automatisierten Bereitstellungsprozess aus dem Continuous Integration-System in das Staging oder die Produktivumgebung. Zend Server deployt das Package, ob im Staging oder in der Produktion, automatisch auf einen Server oder auf eine Gruppe von Servern. Wenn der Zielserver Teil eines Zend Server-Clusters ist, erhalten alle anderen Zend Server-Knoten im Cluster automatisch dieselbe Applikation und Konfiguration. Diese Fähigkeit, den gesamten Code, die Konfiguration und Bibliotheken, die für eine PHP-Applikation erforderlich sind, auf automatisierte Weise in einer geclusterten Umgebung zu verpacken und zu deployen, umfasst zusätzlich die Fähigkeit, im Bedarfsfall ein sofortiges Rollback über einen Cluster hinweg auf vorherige Applikationsversionen durchzuführen.
Zend Server bietet zudem den Vorteil, problemlos sicherzustellen, dass über Entwicklung, Test und Produktivumgebung hinweg ein gemeinsamer und konsistenter Applikationsstack sowie gemeinsame und konsistente Konfigurationen vorhanden sind. Dies beinhaltet Funktionen für das Bibliotheksmanagement, die sicherstellen, dass Framework-Versionen und andere Abhängigkeiten über die einzelnen Umgebungen hinweg ordnungsgemäß verwaltet werden. Dadurch ist es viel einfacher, Applikationen problemlos aus der Continuous Integration-/Entwicklungsumgebung in das Staging und die Produktivumgebung zu bringen. Zend Server stellt dem Team außerdem Warnmeldungen zur Verfügung, um durch Konfigurationsinkonsistenzen verursachte Fehler zu verhindern.
Commit Push
‘Master’-Zweig wird geklont
Tests Staging
Jenkins Cl
Source-Control
Unit-Test
Entwickler
Produktivumgebung
Build Packaging &Deployment
Validierungs-tests
Code-analyse
Der Continuous Delivery Workflow
Zend Technologies, Inc. · www.zend.com 6
Grundlagen der Continuous Integration mit Jenkins und Zend Server
Zend Server: Eine Plattform für die Continuous Delivery von PHP-Applikationen
Vollständige PHP-Laufzeitumgebung
Support & Sicherheitsfixes, Langzeit-Support
Optimierter Stack – Beschleunigung, Caching, Job Queue
ContinuousIntegration
PHP-Stack-Konsistenz
Fehlererkennung
Applikations- und Bibliotheks-Packaging
Release-Automatisierung
Cluster-Deployment
Abhängigkeiten & Versionierung
Automatisiertes Rollback
Automatisches Deployment bei
Aufwärtsskalierungon
Infrastruktur-automatisierung
AutomatisiertesCluster-Provisioning
Cloud-Elastizität
Multi-Server-Konfig-Mgmt.
Clustering & H/A
Automatische Skalierung
Applikations-management
Metriken & Trend-Dashboards
Ursachenanalyse
Transparenz fürDev/Ops
Änderungsverfolgung & Auditing
DevOps-Automatisierungs-APIs
Wie ermöglicht Zend Server Continuous Delivery?
Der Zend Blueprint für Continuous Delivery hat als Kern die Zend Server-Applikationsplatt-form. Zend Server ist konzipiert, um Ihnen dabei zu helfen, Ihre Applikationen schnell, iterativ und konsistent bereitzustellen.
Konsistent. Automatisiert. Kollaborativ. Kein Problem.
Standardisieren Sie Packaging- und Deployment-Tests.
Stellen Sie sofort eine standardisierte Applikationsinfrastruktur bereit.
Automatisieren Sie Deployment, Versionierung und Rollback von
Applikationen.
Verstehen & beheben Sie Produktionsprobleme, und iterieren Sie schnell.
Zend Server: Eine Plattform für Continuous Delivery von PHP-Applikationen
Zend Technologies, Inc. · www.zend.com 7
Grundlagen der Continuous Integration mit Jenkins und Zend Server
Über den AutorSlavey Karadzhov ist Senior Consultant bei Zend Technologies. Er ist PHP 5/5.3, Zend Framework und MySQL Certified Engineer. Stolzer Besitzer von zwei Hochschulabschlüssen – in Computer Science von der Universität in Sofia, Bulgarien, und in Software-Technologien von der Hochschule für angewandte Wissenschaften in Stuttgart, Deutschland. Slavey ist ein starker Verfechter von Open Source und anerkannter Software-Innovator sowie Autor eines Zend Framework 2-Buchs mit dem Titel ‘Learn ZF2: Learning By Example’ (http://learnzf2.com).
Zend Professional Services leiten Implementierungen von agilen Methodologien, Lösungen für das Applikationsdesign sowie für die Optimierung und Continuous Delivery in weltweit agierenden Unternehmen, die geschäftskritische PHP-Applikationen ausführen. Die Consultants konzentrieren sich auf die Beratung der Entwicklungs- und Operations-Teams ihrer Kunden, um Release qualitativ hochwertiger PHP-Applikationen schneller und mit höherer Performance und Verfügbarkeit zu liefern.
Hauptsitz: Zend Technologies, Inc. 19200 Stevens Creek Blvd. Cupertino, CA 95014, USA · Tel 1-408-253-8800 · Fax 1-408-253-8801
Deutschland/Österreich/Schweiz: Zend Technologies GmbH, St-Martin-Str. 53, 81669 München, Deutschland · Tel +49-89-516199-0 · Fax +49-89-516199-20
© 2014 Zend Corporation. Zend und Zend Server sind registrierte Marken von Zend Technologies Ltd. Alle anderen Marken sind Eigentum der jeweiligen Inhaber.
WP-Fundamentals of Continuous Integration with Jenkins and Zend Server-2014-03-31-DE www.zend.com
Über ZendZend arbeitet mit Unternehmen zusammen, um moderne Applikationen mobil und per Cloud schnell zur Verfügung zu stellen. Zend half bei der Etablierung von PHP mit, mit dem heute mehr als 200 Millionen Applikationen und Webseiten betrieben werden. Zends Flagship-Produkt, Zend Server, ist die führende Applikationsplattform für Continuous Delivery von PHP-Applikationen. Zend-Lösungen sind in über 40.000 Unternehmen im Einsatz, einschließlich NYSE Euronext, BNP Paribas, Bell Helicopter und anderen weltweit führenden Marken.
Referenzen und Ressourcen:[1] Zend Blueprint für Continuous Delivery, Zend Technologies,
www.zend.com/de/solutions/continuous-delivery
[2] http://www.thoughtworks.com/de/continuous-delivery