Continuous Integration und
Delivery von Microservices
mit GitLab CI
Christine Koppelt, Philipp Haußleiter
Frankfurter Entwicklertag, 21.02.2018
Slide 2
Slide 2 text
Continuous
Integration (CI) &
Microservices
Slide 3
Slide 3 text
Continuous Integration (CI)
Source
Repository
CI Server
Bauen Testen Paketieren
Server mit
Anwendung
Entwicklungsteam
Sourcecode Deploybare
Anwendung
Feedback
Slide 4
Slide 4 text
Microservices
● Mehrere eigenständige Services bilden ein Gesamtsystem
○ Unterteilt nach Bounded Contexts (Domain Driven Design)
○ Eigenständige Anwendungen (Frontend, Backend, Datenhaltung)
○ Eigenständig deploybare Einheiten
● Eigenständige Entwicklungsteams
○ Komplette Verantwortung für einen Service
○ Extremfall: “You build it you run it”
○ Freiheiten bei technischen und organisatorischen Entscheidungen
Slide 5
Slide 5 text
Microservices & CI
Branches
Datenbanken
Messaging
Testinfrastruktur
Mehrere
Services
Unterschiedliche
Buildtools
Mehrere
Plattformen
Mehrere
Versionen
Docker-basierte
Deployments
A/B Testing
Unterschiedliche
Entwicklungs-
prozesse
Microservices
Slide 6
Slide 6 text
Microservices & Infrastruktur
DO
Entkopplung Infra-Team und Entwicklung
Entwickler konfigurieren CI Jobs und Staging Umgebung selbständig
Kapselung der Buildumgebung
DON’T
Modifikation der Konfiguration des CI Servers für einzelne Projekte
Adminrechte für Entwickler
Langwierige Abstimmungen zwischen Infra-Team und Entwicklung
Slide 7
Slide 7 text
Self
Service
Slide 8
Slide 8 text
GitLab
Slide 9
Slide 9 text
GitLab
● Gestartet als Web-Basierter Git Repository Manager
● Mittlerweile: Umfangreiche Softwareentwicklungssuite
○ Issue Tracker integriert
○ CI Server integriert
○ Bauen von Merge Requests und Branches integriert
○ Anlegen von Jobs über eine deklarative Konfiguration mittels Yaml
○ Builds innerhalb Docker
=> Sinnvolle Konventionen, modularer Ansatz
● Open Source, kommerzielle und Cloud Versionen
Slide 10
Slide 10 text
Setup
Slide 11
Slide 11 text
Beispiel
Slide 12
Slide 12 text
CI Pipeline
build_jar
build
build_docker_image
package
deploy_staging
deploy
Job
Stage
Sourcecode
auschecken
Kompilieren Testen Paketieren Deployen
test
int_test1
int_test2