Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
© Copyright 2018 GEBIT Solutions GmbH
Teile und herrsche: Integration und Automatisierung der Tools im Entwicklerstack
Dr.-Ing. Dehla Sokenou, Carsten Pfeiffer GEBIT Solutions GmbH
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Typische Projektlandschaft (?)
locker 150 Projekte im Workspace, hunderte Abhängigkeiten
minutenlanger Build in Eclipse
hoher Speicherbedarf
kein Source-Code von Binärabhängigkeiten zum Debuggen
seitenlange Anweisungen zum Aufsetzen des Workspaces
(natürlich out-of-date)
Aufsetzen Build-Server + Jobs
Möglichst noch für diverse Branches
Bauen der Projekte (IDE Build vs. Build-Job)
paralleles Ausführen von Jobs geht nicht – Ressourcenkonflikte...!
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Ziel
Zeit sparen!
schnelles Setup
Wiederverwendung
Anpassbarkeit
Idealerweise Self-Service für Projekte
Admins entlasten!
Puzzleteile
Tools
Konfiguration
Infrastruktur
Namenskonventionen
Regeln
Validierungen
Tools
Konfiguration
Infrastruktur
Das geht auch anders!
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Das große Ganze...
Eine
projektübergreifende einheitliche
Entwicklungsumgebung inklusive
einheitlichem Entwicklungsprozess
Vom Kick-Off
bis zur
Wartung
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Das große Ganze... ... zerlegt in seine Bestandteile
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Schaltzentrale
Maven als zentrale integrative Komponente
Steuert alle Phasen der Entwicklung
Vom Projektstart bis Release und Maintainance
Entwickler muss "nur noch" entwickeln
Maven-Kenntnisse und natürlich Entwicklerskills (Java, ...) erforderlich
Das Herumschlagen mit 1001 Tool ist nicht mehr notwendig (Stichwort: seitenlange, nicht mehr aktuelle Anweisungen im Wiki...)
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Steuerung durch Maven-Build: de.gebit.build:gebit-build
als parent-pom eingebunden
Bereitstellung wiederverwendbarer Konfigurationsschnipsel
Unterstützung für
Snapshot, Integration, Releases
Feature Branches
projektübergreifend einheitlich
Develop
Build
Publish (Nexus)
Release
Branch-Benennung (features/, releases/)
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Maven-Archetypes
Vorlagen zur Erzeugung gleichartiger Dinge
Hier: gleichartiger Projekte, mit gebit-build als parent-pom
Neues Projekt? – Ganz einfach!
Interaktiver Prozess mit Abfrage projektspezifischer Parameter
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeGroupId=de.gebit.build.archetype -DarchetypeArtifactId=gebit-build-archetype-standard -DarchetypeVersion=2.0.0
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Ein Archetype für jeden Fall
Beispiele
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Setup Entwicklungsumgebung
Entwickler innerhalb eines Projekts sollten die gleiche Entwicklungsumgebung verwenden
Konkret:
IDE Aufsetzen und auf Stand halten
Plugins aktuell halten
Projekte aus dem Repository auschecken
neue Projekte in den Workspace
alte Projekte aus dem Workspace
gemeinsame Einstellungen (Compiler, Code Formatter, Code Conventions)
Archetypes für Projekt-Setup enthalten bereits Oomph-Setup für Eclipse
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Oomph...!
Erlaubt die Provisionierung eigener Eclipse-Distributionen
Bestehend aus
Product-Setup
Für das Aufsetzen von Eclipse + Plugins
Project-Setup
Projektspezifische Einstellungen
Leider wenig dokumentiert und mit jeder Version ein wenig anders
Empfehlung: Oomph-Editor verwenden
Aufruf mit Redirection auf eigenes Setup: eclipse-inst.exe -vmargs "-Doomph.redirection.setups=index:/-> http://myowngit.gebit.de/myproject/setupdir/"
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Configuration as Code
Erzeugtes Projekt bringt bereits alles mit, um benötigte Jenkins-Jobs automatisch zu erzeugen
per JobDSL (Jenkins Job DSL Plugin)
Vorlagen für Standardjobs inklusive
Zweistufiger Prozess
1. Seed-Creator-Job erzeugt projektspezifische Seed-Jobs
Läuft i. d. R. einmalig zu Beginn des Projekts
2. Projektspezifische Seed-Jobs erzeugen Projekt-Jobs
laufen regelmäßig (bzw. getriggert durch Änderungen) und Erstellen/Aktualisieren die "richtigen"
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Job-Framework
Aktuell verfügbare Templates
Seed-Build-Job (Meta-Ebene)
Maven-Build-Job
Pipeline-Build-Job
Anpassungsmöglichkeiten
Parametrisierung der Job-Erzeugung
wenn das nicht reicht: eigene DSL-Scripts
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Job-DSL – Beispiel (Auszug aus Maven-Job-Builder)
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
T(e)ile und herrsche
Griff in die Werkzeugkiste: Maven-Tiles
Konfigurationsschnipsel für gleichartige Aufgaben
java: source level, debug, encoding, …
packaging: jar, bundle, ear, war, sources
javadoc
checkstyle, findbugs, jacoco
Validierung (enforcer)
Wildfly deployment
Einfaches Einbinden in eigene Projekte per Mixin
Wiederverwendbar, anpassbar
Vermeidung von Copy & Paste
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Maven-Tiles – Definition und Verwendung
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Feature-basiert arbeiten – git macht's vor, wer macht mit?
Stichwort: Start und Finish
eigene Maven-Artefaktversion zur Entkopplung vom master/maintenance-Branch
eigene Maven-Artefaktversion nur temporär während der Feature-Entwicklung
Stichwort: Entwicklung
Regelmäßiges Einspielen des master (rebase) macht den Merge am Ende einfacher
Stichwort: Bauen und Testen
Feature-Branch sollte analog master/maintenance-Branch auf dem Buildserver gebaut und getestet werden
Toolunterstützung notwendig!
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Branch-Handling per git-flow-Plugin
Feature-Branch-Erstellung
Automatische Anpassung der Versionsnummern
Erstellung eines Feature-Branch-Jobs auf dem Jenkins (optional)
Feature-Rebase als Goal im git-flow-Plugin
Automatisch, sofern möglich
Änderungen der Version im master werden ignoriert
Feature-Branch mergen und löschen
Versionsnummernänderung wird aus git-Historie herausgefiltert, d.h. Commits für die Artefaktversionierung werden vor dem Feature-Merge entfernt
Das funktioniert nicht nur für den master, sondern auch für Maintenance-Branches!
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
mvn:flow feature-finish (Auszug aus dem Protokoll)
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Wenn 50 Entwickler in 20 Projekten an 40 Features arbeiten...
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Parallelität und trotzdem Isolation durch Jenkins-Slaves und Docker-Plugin
Vorkonfigurierte Docker-Images sind Teil des gebit-builds
Parallelität dank Docker
Jenkins Master
Jenkins Slave
Jenkins Slave
Jenkins Slave
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Skalierbarkeit dank Docker
Lastverteilung für parallele Builds durch dynamisches Hinzuschalten von Ressourcen
Wenn der Build im Docker-Slave läuft, ist es eigentlich egal, wo
Build-Server
VMs, die nur idlen
Cloud
Transparent und ohne dass der Entwickler etwas tun muss
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Validierung
git-Commits
vollständiger Namen?
JIRA-Issue-ID angegeben?
Commit-Message angegeben?
forced-pushes nur für Feature-Branches erlaubt
CheckStyle, FindBugs, ...
Maven-Enforcer
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Projektsteuerung und Reporting
Release-Notes
Automatisch in Confluence aus Jira-Issues generiert
Integration/Synchronisation mit JIRA-Issues
Anzeige von git-Commits pro Issue, getrackt durch JIRA-Issue-ID
Statusupdate und -synchronisation von JIRA nach TREND/Analyst (Requirements)
Maven-Site
Versioniert für alle Maintenance-Branches
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Weitergehende Integration
Anbindung aller relevanten System ans AD
Vereinfachte Administration durch Projektleiter durch einheitliche Gruppen und deren Zugriffsrechte für jedes Projekt
Devs, PLs, Customer, ...
Projektspezifisch anpassbar
Mattermost
zur Kommunikation innerhalb der Projekte, aber auch projektübergreifend
Benachrichtigungen durch Jenkins-Jobs, Deployments, ...
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Fazit
Best Practices (hard und soft) als Vorgabe!
Zeit sparen!
beim Anlegen eines neuen Projekts
durch Maven Archetypes
automatisiertes Eclipse Setup (Oomph)
automatisiertes Aufsetzen von Jenkins-Jobs (JobDSL)
bei der Entwicklung
Maven-Build und Eclipse-Build verwenden dieselbe Konfiguration (pom)
wiederverwendbare Maven-Konfigurationen (tiles)
mvn flow:feature-start, feature-rebase, feature-finish, ...
bei den Builds
parallele Jenkins-Jobs in isolierten Containern
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Fazit
vieles bekannt...
...aber fast alles musste angepasst werden
Oomph
m2e
Jenkins-Plugins
Maven-Plugins
jgit
egit
docker-plugins
JIRA
GitLab
...
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Besser geht immer...!
Docker-Compose auf Jenkins
Aktuell: zusätzliche Container für Integrationstestszenarien werden von Maven gestartet (Workaround)
Zusammenfassen von bisher noch nötigen Einzelschritten Infrastructure as a Service
Projekt anlegen weiter vereinfachen
feature:finish mit optionalem feature:rebase
...
...
We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH
Alles geschafft!
Integration von
Oomph
m2e
Jenkins-Plugins
Maven-Plugins
jgit
egit
docker-plugins
JIRA
GitLab
...
hilft Zeit sparen!