Die Datenbank-Spezialisten.
Continuous Integration für Eclipse 4 RCP-Anwendungen mit Maven/Jenkins/Nexus/Sonar
Hannes Schmidt – 02.10.2015
Continuous Integration fr Eclipse 4 RCP-Anwendungen mit - - PowerPoint PPT Presentation
Continuous Integration fr Eclipse 4 RCP-Anwendungen mit Maven/Jenkins/Nexus/Sonar Hannes Schmidt 02.10.2015 Die Datenbank-Spezialisten. Eclipse-Basics Die Datenbank-Spezialisten. Plugins, Features, Produkte Produkt Feature B
Die Datenbank-Spezialisten.
Hannes Schmidt – 02.10.2015
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Plugins, Features, Produkte … Plugin A Plugin B Plugin C Feature A Feature B Produkt
Die Datenbank-Spezialisten.
Manifest
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: EXAMPLE-PROJECT Bundle-SymbolicName: org.example.project;singleton:=true Bundle-Version: 3.18.1.qualifier Require-Bundle: org.apache.log4j;bundle-version="1.2.0";visibility:=reexport Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: org.example Import-Package: org.osgi.framework;version="1.7.0";resolution:=optional
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Stand vor Eclipse RCP-Projekt
Ticketsystem Eigenentwicklung Versionsverwaltung Eigenentwicklung Ticket- und Versionsverwaltung auf selber DB, arbeiten eng
miteinander zusammen
Applikationsstart über Java Webstart
Die Datenbank-Spezialisten.
Stand vor Eclipse RCP-Projekt
Ticket kapselt installierbaren Patch pro Werktag 20 – 40 Tickets Durchsatz jeder Kunde hat anderen Patchstand Installation eines Patches mittels Apache Ant
Die Datenbank-Spezialisten.
Modultypen
Datenbankmodule (Tabellen, Sequenzen, Trigger, Packages, Views,
Types …)
Datenbankskripte (Stammdaten, Datenmigration) Java-Module, über Eclipse exportiert Oracle-Forms-Module (Maske, Bibliothek)
Die Datenbank-Spezialisten.
Probleme
veraltete Technologie (Oracle Forms) Komplexität: ~1000 Forms-Masken, +20000 DB-Module sehr modulare Auslieferung extrem kurze Patchzyklen
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Continuous Integration
„Beschreibt den Prozess des fortlaufenden Zusammenfügens von Komponenten zu einer Anwendung.“
Die Datenbank-Spezialisten.
Motivation für CI
kurze Patchzyklen im Projekt Release-Aufwand war mit vorheriger Technologie sehr gering Entwicklungsgeschwindigkeit musste gleich bleiben im RCP-Projekt sollte der Release-Aufwand genauso niedrig sein
Die Datenbank-Spezialisten.
Tools für CI
Versionsverwaltung Repository-Manager Build-Automatisierung Continuous Integration Tool Tool für Code-Qualität
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Versionsverwaltung Subversion CVS Git Mercurial Bitkeeper zentralisiert verteilt
Die Datenbank-Spezialisten.
Variante 1 core core-test Plugin Plugin.test SCM-Repository A branches tags trunk branches tags trunk … …
Die Datenbank-Spezialisten.
Variante 2 core Host SCM-Repository A branches tags trunk Plugin Test
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
p2 Repository
Equinox Sub-Projekt Updateseite Erstellen der Compile-
Umgebung
content.xml artifacts.xml features/ plugins/ a.feature_1.0.0.xml a.plugin_1.0.0.jar
Die Datenbank-Spezialisten.
Maven2 Repository
lokal intern öffentlich
example example- project 1.0.0 example-project- 1.0.0.jar example-project- 1.0.0-source.jar
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Repository-Manager Archiva Artifactory Nexus
Die Datenbank-Spezialisten.
Konfiguration Repositories m2-Snapshot- Repo m2-Stable- Repo p2-Snapshot- Repo p2-Stable- Repo maven deploy release p2-Third- party-Repo special P2-Capability P2-Capability
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Build-Automatisierung Apache Ant Apache Maven Gradle Eclipse PDE
Die Datenbank-Spezialisten.
Maven
Lebenszyklus
– validate, compile, test, install, deploy…
Project Object Model Convention over Configuration Abhängigkeitsmanagement
Die Datenbank-Spezialisten.
Tycho
Extension für Maven Manifest-first unterstützt Bundles, Fragmente, Features, Update-Sites … kaum Redundanz in Metadaten bei POM und Manifest
Die Datenbank-Spezialisten.
Jar content.xml Plugins Target manifest.mf Tycho – Funktionsweise pom.xml Repository src/
Die Datenbank-Spezialisten.
Maven Konfigurationsbaum company-parent tycho-parent project-parent core-parent masks-parent maskparts-parent A B C D E F Parent und Reaktor
Die Datenbank-Spezialisten.
Plan RCP-Quellen bestehende Prozesslandschaft ?
Die Datenbank-Spezialisten.
Maven Release Plugin – Preparation Goals
<preparationGoals>
${parsedVersion.incrementalVersion} scm:checkin
[${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incr ementalVersion}]"
</preparationGoals>
Die Datenbank-Spezialisten.
Maven Release Plugin – Completion Goals
<completionGoals>
${parsedVersion.incrementalVersion}.qualifier scm:checkin
[${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion. incrementalVersion}.qualifier]"
</completionGoals>
Die Datenbank-Spezialisten.
Maven Release Plugin – weitere Konfiguration
<goals>deploy,signservice:sign,de.robotron.maven.plugins:rvcs- maven-plugin:${rvcs.version}:checkin</goals> <remoteTagging>false</remoteTagging> <suppressCommitBeforeTag>true</suppressCommitBeforeTag> <useReleaseProfile>false</useReleaseProfile>
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Aufbau
<target name="plugin-target" sequenceNumber="1"> <locations> <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit"> <repository location="http://nexus.example.com/content/repositories/repoA/.meta /p2/"/> <unit id="com.example.plugin" version="1.1.1.c201507281332"/> <unit id="com.example.plugin.source" version="1.1.1.c201507281332"/> </location> <locations> </target>
Die Datenbank-Spezialisten.
unstable-plugin-target
entspricht dem Trunk im Subversion zum Bauen von Snapshots automatische Aktualisierung nach Snapshot-Build keine Tags, immer Version 1.0.0-SNAPSHOT
Die Datenbank-Spezialisten.
stable-plugin-target
enthält alle über Maven Release freigegebenen Module zum Bauen von Stable-Plugins (Maven Release) automatische Aktualisierung nach Maven Release keine Tags, immer Version 1.0.0-SNAPSHOT
Die Datenbank-Spezialisten.
feature-target
enthält alle Features des Projekts zum Materialisieren von Produkten händische Aktualisierung keine Tags, immer Version 1.0.0-SNAPSHOT
Die Datenbank-Spezialisten.
running-number-plugin-target
pro möglichem Patchstand ein Tag Trunk enthält den zurzeit freigegebenen Patchstand zum Bauen von Hotfixes
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Continuous Integration Tool Jenkins Hudson Bamboo
Die Datenbank-Spezialisten.
regular regular regular regular regular regular nightly nightly nightly Jenkins Job Overview core-parent masks-parent maskparts-parent A B C D E F
Die Datenbank-Spezialisten.
Jenkins Jobverwaltung
Jenkins-Maven-Plugin Job im XML definieren Vererbung kaum C&P-Fehler Plugin erzeugt config.xml Publish über Jenkins REST-API
Die Datenbank-Spezialisten.
Einen Job anlegen
<job> <id>pluginA</id> <parent>common-deploy</parent> <repository> <remote>http://svn/core/trunk/pluginA</remote> <local>.</local> </repository> </job>
Die Datenbank-Spezialisten.
API zur Verfügung stellen Moduljob gav update- target-file-job update- target-file-job SVN target.xml Nexus
Die Datenbank-Spezialisten.
Deployment auf Entwicklungs-Application-Server Moduljob gav update- target-file-job jar Applserv gav deploy-to- applserv-job deploy-to- applserv-job Nexus
Die Datenbank-Spezialisten.
Module Release
Maven-release-plugin, Jenkins Maven Release Plug-in Plug-in
Die Datenbank-Spezialisten.
Buildflow
manche Jobs haben Vorgänger … CloudBees Build Flow plugin
– kann Build-Pipelines abbilden – einfache DSL build( "job1" ) build( "job2" ) build( "job3" )
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Third-Party Repository erstellen Nexus-Site pom.xml
p2-maven-plugin P2-Repo cp / scp
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Konfiguration ohne manifest.mf
Die Datenbank-Spezialisten.
Third-Party releasen
alle Plugins aus Feature-repo runterladen wenn BSN nicht mit „your.domain.“ beginnt über API ins Ticketsystem, wenn API-Version dort noch nicht
vorhanden ist
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
URL-Trigger Test-Job Nexus latest unstable- plugin-target Starte Job Version von Host geändert
Die Datenbank-Spezialisten.
Unit Tests – warum so kompliziert? SVN-Struktur core core-test Plugin Plugin.test trunk trunk Host … Plugin Test
Die Datenbank-Spezialisten.
pom.xml pom.xml
Unit Tests – neuer Ansatz Job SVN Generische Reaktor-POM Host Test pom.xml Host Test
schnelleres Feedback weniger Jobs
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Code-Qualität SonarQube manuell automatisch PMD Checkstyle Findbugs Sonargraph Inspektion Audit Pair Programming Walkthrough Atlassian Crucible
Die Datenbank-Spezialisten.
Sonar
Nightly Build aktualisiert Sonar deshalb lokale Analysen:
– Sonarqube for Eclipse – Preview-Analysis mit maven-sonar-plugin und HTML-Report
Sonar-Analyse vor dem Release
… langsames Feedback
Die Datenbank-Spezialisten.
Quality Gates
Die Datenbank-Spezialisten.
Release Sonar Test
Build Breaker-Plugin für Sonar erreicht die Sonar-Analyse vor dem Release das Quality-Gate nicht,
dann wird das Release abgebrochen
Die Datenbank-Spezialisten.
Release Sonar Test Umsetzung Release-Build IS_RELEASEBUILD SNAPSHOT-Build Conditional BuildStep Plugin mvn -B -e sonar:sonar
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Schritte nach Maven-Release
Integration des Patches auf das Integrationssystem mittels Apache
ANT
Nach Deployment folgen Integrationstests …
Die Datenbank-Spezialisten.
Entity-Integration-Test
Datenmodell-Änderungen brechen Entitäten-API Entitäten-API-Erweiterungen werden ohne Datenmodell-Änderung
abgegeben
deshalb: Gleichzeitige Integration von Datenmodell-Änderungen
und Entitäten Prüfung
– aller abgegebenen Entitäten gegen das Datenmodell – aller abgegebenen Datenmodelländerungen gegen Entitäten Bei Inkompatibilität schlägt der Integrationsbuild fehl
Die Datenbank-Spezialisten.
OSGi-Integration-Test
OSGi mit allen Bundles starten OSGi-Konsole: „ss -s installed“ werden Bundles ausgegeben, schlägt der Build fehl Beispiel-Whitelist: ^.+\.win32.+$
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Contra
Releasen dauert pro Plugin 10 – 15 min teils große Abhängigkeitsbäume für Patches viele Jobs im Jenkins
Die Datenbank-Spezialisten.
Pro
häufige Integration (trigger durch commit) schnelles Feedback relativ genaue Problemzuordnung möglich automatisierte Quellcodeanalyse Vorbereitung für modulare Auslieferung
Die Datenbank-Spezialisten.
Hannes Schmidt
Konfigurationsmanager www.robotron.de
Die Datenbank-Spezialisten.
Quellen
https://de.wikipedia.org/w/index.php?title=Kontinuierliche_Integration&stableid=144464982 https://de.wikipedia.org/w/index.php?title=Versionsverwaltung&stableid=142123493 https://maven.apache.org/repository-management.html https://de.wikipedia.org/w/index.php?title=Apache_Subversion&stableid=145933763 https://cwiki.apache.org/confluence/display/MAVENOLD/Repository+Layout+-+Final https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin
Die Datenbank-Spezialisten.
Die Datenbank-Spezialisten.
Maven
Version 3.0.4 org.apache.maven.plugins:maven-compiler-plugin:3.1 org.apache.maven.plugins:maven-deploy-plugin:2.7 org.apache.maven.plugins:maven-source-plugin:2.2.1 org.apache.maven.plugins:maven-scm-plugin:1.9 org.apache.maven.plugins:maven-release-plugin:2.3.2 org.codehaus.mojo:build-helper-maven-plugin:1.8:parse-version org.reficio:p2-maven-plugin:1.0.2
Die Datenbank-Spezialisten.
Tycho
Version 0.19.0 org.eclipse.tycho:tycho-packaging-plugin org.eclipse.tycho:tycho-source-plugin org.eclipse.tycho:target-platform-configuration org.eclipse.tycho:tycho-versions-plugin:update-pom org.eclipse.tycho:tycho-versions-plugin:set-version
Die Datenbank-Spezialisten.
Jenkins
Version 1.546 Jenkins Xvfb plugin 1.0.12 Jenkins URLTrigger Plug-in 0.37 Rebuilder 1.20.0 Timestamper 1.6.2 Jenkins Maven Release Plug-in Plug-in 0.13.0 Jenkins Sonar Plugin 2.1 conditional-buildstep 1.3.3 CloudBees Build Flow plugin 0.18
Die Datenbank-Spezialisten.
Nexus
Version 2.5.1-01 Nexus p2 Repository Plugin 2.3.2
Die Datenbank-Spezialisten.
Sonar
Version 4.5.5 Build Breaker 1.1 Issues Report 1.3