Transcript

© 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

© Copyright 2018 GEBIT Solutions GmbH

Integration durch und mit Maven

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/)

© Copyright 2018 GEBIT Solutions GmbH

Gern vergessen: Projekt-Setup

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

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

Was wir bis hierher haben...

© Copyright 2018 GEBIT Solutions GmbH

Wer baut denn hier?

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

Jobs erzeugen

We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH

Jobs erzeugen

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)

© Copyright 2018 GEBIT Solutions GmbH

Baukasten für Entwickler

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

© Copyright 2018 GEBIT Solutions GmbH

Der Umgang mit dem Feature

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

© Copyright 2018 GEBIT Solutions GmbH

(Noch mehr) Dinge, die das Leben leichter machen

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, ...

© Copyright 2018 GEBIT Solutions GmbH

Last, but not least

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

!?

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!

We are hiring! - jobs.gebit.de © Copyright 2018 GEBIT Solutions GmbH

Zeit für Fragen

Bonshooter-Gewinnspiel?

Besuchen Sie uns gern am Stand!


Recommended