SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Erste Schritte bei der
Einführung von CI-Pipelines in
GitLab-Projekten
Christian Mücke (Detlev Louis GmbH)
PHP User Group Hamburg, 20. März 2018
Das Problem
“Kannst du das schnell für
mich machen?”
Ja, aber … ach na gut.
Die Lösung
cp ../project/.gitlab-ci.yml .
… ?
Noch 28 Minuten …
1. Jenkins ist doch auch gut?!
2. Erinnerung: Warum Continuous Integration?
3. Toolset: Klassifikation und Web-Ressourcen
4. Schritt für Schritt zur CI-Pipeline
Jenkins hat seine
Daseinsberechtigung.
Continuous
Integration
Warum?
❏ Fehlervermeidung
❏ Vereinfachte Koordination
❏ Schnellere Releases
CI-Tools
❏ Korrektheit
❏ Codeanalyse
❏ Kompatibilitätsprüfung
❏ Sicherheit (CVEs)
❏ Compliance
❏ DokumentationEinsatzklassifikation
CI-Tools
Web-Ressourcen
❏ https://blog.jetbrains.com/
phpstorm/category/
php-annotated-monthly/
❏ https://github.com/
leanphp/common-dev
❏ https://github.com/
ziadoz/awesome-php
❏ https://packagist.org/explore/
popular
❏ PHP Magazin
Immer diese
Theorie.
Ich will etwas
erleben.
Stufenmodell: Build
Build
z. B. Composer-Libs,
Autoloading, Orchestrierung,
Assets kompilieren,
minifizieren
Test
Docs
❏ 1:n-Relation der
Stage zu Jobs
❏ Separate Jobs für
Prod und Dev
Die erste Stage.
stages:
- build
composer-dev:
stage: build
script: ["./composer.phar install"]
❏ Tags: Flexible
Auswahl von
Runnern
❏ Ausführung
einschränken
(wenn möglich)
Die erste Stage.
stages:
- build
composer-dev:
stage: build
script: ["./composer.phar install"]
tags:
- ci-internet
- docker-test
only: [branches]
Jedes Mal
Composer-Abhängig-
keiten laden. Ist das
nicht ineffizient? ⌛
Caching.
❏ Netzwerktraffic und
Ressourcennutzung optimieren
❏ pro Projekt, Branch, Job, …
❏ kann global und lokal pro Job
definiert werden
❏ Cache wird mit Start eines
Jobs geladen und nach
Ausführung gespeichert
Kenn ich!!1
❏ Beliebige Keys
möglich
❏ docs.gitlab.com
/ce/ci/variables/
❏ Literale
❏ Transienter Ansatz:
“Hit or miss - I don’t
care”
Caching
composer-dev:
stage: build
script: ["./composer.phar install"]
cache:
key: "$CI_JOB_NAME"
paths: ["vendor"]
untracked: true
…
Artefakte.
❏ Ansatz: “Brauche ich!!”
❏ dienen der Weitergabe oder
Archivierung von Ressourcen
❏ eignen sich bereits für einfache
Deployments
Hm?
Artefakte
❏ können per UI als
zip-Datei
gedownloadet
werden
❏ Jobs können
Artefakte verwenden
composer-dev:
stage: build
script: ["./composer.phar install"]
…
artifacts:
name: "composer-dev-
${CI_COMMIT_SHA}"
untracked: true
expire_in: 1 hour
paths: ["vendor"]
…
Das Ergebnis
❏ Alle Jobs einer Stage
werden parallel
ausgeführt
❏ Nächste Stage erst
bei Erfolg aller Jobs
❏ Fail fast => ggf. auf
mehrere Stages
aufteilen
stages:
- build
composer-dev:
stage: build
script: ["./composer.phar install"]
cache:
key: "$CI_JOB_NAME"
paths: ["vendor"]
untracked: true
artifacts:
name: "composer-dev-${CI_COMMIT_SHA}"
untracked: true
expire_in: 1 hour
paths: ["vendor"]
tags:
- ci-internet
- docker-test
only: [branches]
Stufenmodell: Test
Build
z. B. Composer-Libs,
Autoloading, Orchestrierung,
Assets kompilieren,
minifizieren
Test
PHPUnit / Atoum, Behat, PHPStan,
Code Sniffer, Mess Detector, …
Docs
Exkurs:
Composer-Scripts
❏ Ant? Phing? …
❏ Aufruf: composer run <job>
❏ Default-Timeout: 5 Minuten
❏ Gruppen von Jobs möglich
❏ Abbruch, wenn erster Job
einer Gruppe fehlschlägt
"scripts": {
"serve": "php -S 0.0.0.0:8080
-t public
public/index.php",
"check": [
"@test"
],
"test": "phpunit --colors=always"
}
Unser zweiter Job
<3
❏ Argumente an
CI-Ausführung
anpassen (z. B.
testdox-Format)
stages:
- build
- test
…
phpunit:
script: ["./composer.phar
run test -- --testdox"]
stage: test
dependencies: ["composer-dev"]
tags: ["docker-test"]
DRY
❏
…
.test_job_template: &test_job
stage: test
dependencies: ["composer-dev"]
tags: ["docker-test"]
phpunit:
script: ["./composer.phar
run test -- --testdox"]
<<: *test_job
lint:
script: ["./composer.phar
run lint --
--no-progress"]
<<: *test_job
http://knowyourmeme.com/memes/feels-good
Ein paar Tools zum Einbauen
❏ phpunit/phpunit
❏ jakub-onderka/
php-parallel-lint
❏ jakub-onderka/
php-console-highlighter
❏ squizlabs/php_codesniffer
❏ mayflower/mo4-coding-standard
❏ phpmd/phpmd
❏ phpstan/phpstan
❏ hmlb/phpunit-vw
Stufenmodell: Docs
Build
z. B. Composer-Libs,
Autoloading, Orchestrierung,
Assets kompilieren,
minifizieren
Test
PHPUnit / Atoum, Behat, PHPStan,
Code Sniffer, Mess Detector, …
Docs
Sami, phpmetrics,
Coverage-Infos, …
The same
procedure every …
yeah.
❏ Sonderfall:
Testabdeckung
bestimmen
❏ docs.gitlab.com
/ee/user/project
/pipelines
/settings.html#test-c
overage-parsing
stages:
…
- docs
…
.docs_job_template: &docs_job
stage: docs
dependencies: ["composer-dev"]
tags: ["docker-test"]
coverage:
script: ["./composer.phar
run test-coverage"]
coverage: '/^s*Lines:s*d+.d+%/'
<<: *docs_job
Habenwill!
GitLab Pages
❏ Statische Seiten
deployen
❏ Spezielle Job-Syntax
pages:
script: ["./composer.phar
run phpmetrics
&& mv public app_public
&& mv doc public"]
artifacts:
paths: [public]
expire_in: 30 days
<<: *docs_job
Bunt ist’s …!
Der Gerät schläft
nicht!
❏ GitLab Schedules
erlaubt periodische
Ausführung von Jobs
❏ z. B. für nächtliche
Selenium-Tests,
VM-Builds,
Langzeit-Load-Tests,
…
pdepend:
script: ["./composer.phar
run pdepend"]
only: [schedules]
<<: *docs_job
Einrichtung von CI-Schedules
Docs-Tooling
❏ phploc/phploc
❏ phpmetrics/phpmetrics
❏ sami/sami
❏ pdepend/pdepend
❏ sebastian/pdepend-process
Das war’s. Danke.

Contenu connexe

Tendances

Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Torben Knerr
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
Quarkus Quickstart
Quarkus QuickstartQuarkus Quickstart
Quarkus QuickstartQAware GmbH
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreGregor Biswanger
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungFrank Schmittlein
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantChristoph Möller
 
PHP Deployment mit Ansible
PHP Deployment mit AnsiblePHP Deployment mit Ansible
PHP Deployment mit AnsibleMichael Döhler
 
Django & Buildout
Django & BuildoutDjango & Buildout
Django & Buildoutzerok
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppetinovex GmbH
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessRalf Abramowitsch
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenNicholas Dille
 
openFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstopenFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstJeongHo Park
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Continuous Integration mit Hudson
Continuous Integration mit HudsonContinuous Integration mit Hudson
Continuous Integration mit HudsonDr. Christian Betz
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang BarthNETWAYS
 

Tendances (20)

HTML5-Features
HTML5-FeaturesHTML5-Features
HTML5-Features
 
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Codeception VisualCeption
Codeception VisualCeptionCodeception VisualCeption
Codeception VisualCeption
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Quarkus Quickstart
Quarkus QuickstartQuarkus Quickstart
Quarkus Quickstart
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
 
PHP Deployment mit Ansible
PHP Deployment mit AnsiblePHP Deployment mit Ansible
PHP Deployment mit Ansible
 
Django & Buildout
Django & BuildoutDjango & Buildout
Django & Buildout
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build Prozess
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
 
openFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstopenFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erst
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Continuous Integration mit Hudson
Continuous Integration mit HudsonContinuous Integration mit Hudson
Continuous Integration mit Hudson
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
 

Similaire à GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018

C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsQAware GmbH
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!Tobias Schneck
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturQAware GmbH
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018André Krämer
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringQAware GmbH
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerPatrick Baumgartner
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Teambrandts
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringQAware GmbH
 
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPagesDas funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPagesChristian Güdemann
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0Patrick Charrier
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3
Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3
Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3Samuel Nitsche
 

Similaire à GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018 (20)

C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPagesDas funktionierte doch schon einmal! - JUnit Testing in XPages
Das funktionierte doch schon einmal! - JUnit Testing in XPages
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3
Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3
Apex NRW Meetup 10/2019 - Testing mit utPLSQL v3
 
Debugging und Profiling
Debugging und ProfilingDebugging und Profiling
Debugging und Profiling
 

GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018