Continuous Integration fr Eclipse 4 RCP-Anwendungen mit - - PowerPoint PPT Presentation

continuous integration f r
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

Die Datenbank-Spezialisten.

Continuous Integration für Eclipse 4 RCP-Anwendungen mit Maven/Jenkins/Nexus/Sonar

Hannes Schmidt – 02.10.2015

slide-2
SLIDE 2

Die Datenbank-Spezialisten.

Eclipse-Basics

slide-3
SLIDE 3

Die Datenbank-Spezialisten.

Plugins, Features, Produkte … Plugin A Plugin B Plugin C Feature A Feature B Produkt

slide-4
SLIDE 4

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

slide-5
SLIDE 5

Die Datenbank-Spezialisten.

Projektanalyse vor Eclipse RCP

slide-6
SLIDE 6

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

slide-7
SLIDE 7

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

slide-8
SLIDE 8

Die Datenbank-Spezialisten.

Modultypen

 Datenbankmodule (Tabellen, Sequenzen, Trigger, Packages, Views,

Types …)

 Datenbankskripte (Stammdaten, Datenmigration)  Java-Module, über Eclipse exportiert  Oracle-Forms-Module (Maske, Bibliothek)

slide-9
SLIDE 9

Die Datenbank-Spezialisten.

Probleme

 veraltete Technologie (Oracle Forms)  Komplexität: ~1000 Forms-Masken, +20000 DB-Module  sehr modulare Auslieferung  extrem kurze Patchzyklen

slide-10
SLIDE 10

Die Datenbank-Spezialisten.

Continuous Integration

slide-11
SLIDE 11

Die Datenbank-Spezialisten.

Continuous Integration

„Beschreibt den Prozess des fortlaufenden Zusammenfügens von Komponenten zu einer Anwendung.“

slide-12
SLIDE 12

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

slide-13
SLIDE 13

Die Datenbank-Spezialisten.

Tools für CI

 Versionsverwaltung  Repository-Manager  Build-Automatisierung  Continuous Integration Tool  Tool für Code-Qualität

slide-14
SLIDE 14

Die Datenbank-Spezialisten.

Versionsverwaltung

slide-15
SLIDE 15

Die Datenbank-Spezialisten.

Versionsverwaltung Subversion CVS Git Mercurial Bitkeeper zentralisiert verteilt

slide-16
SLIDE 16

Die Datenbank-Spezialisten.

Variante 1 core core-test Plugin Plugin.test SCM-Repository A branches tags trunk branches tags trunk … …

slide-17
SLIDE 17

Die Datenbank-Spezialisten.

Variante 2 core Host SCM-Repository A branches tags trunk Plugin Test

slide-18
SLIDE 18

Die Datenbank-Spezialisten.

Repositories

slide-19
SLIDE 19

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

slide-20
SLIDE 20

Die Datenbank-Spezialisten.

Maven2 Repository

 lokal  intern  öffentlich

  • rg

example example- project 1.0.0 example-project- 1.0.0.jar example-project- 1.0.0-source.jar

slide-21
SLIDE 21

Die Datenbank-Spezialisten.

Repository-Manager

slide-22
SLIDE 22

Die Datenbank-Spezialisten.

Repository-Manager Archiva Artifactory Nexus

slide-23
SLIDE 23

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

slide-24
SLIDE 24

Die Datenbank-Spezialisten.

Build-Automatisierung

slide-25
SLIDE 25

Die Datenbank-Spezialisten.

Build-Automatisierung Apache Ant Apache Maven Gradle Eclipse PDE

slide-26
SLIDE 26

Die Datenbank-Spezialisten.

Maven

 Lebenszyklus

– validate, compile, test, install, deploy…

 Project Object Model  Convention over Configuration  Abhängigkeitsmanagement

slide-27
SLIDE 27

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

slide-28
SLIDE 28

Die Datenbank-Spezialisten.

Jar content.xml Plugins Target manifest.mf Tycho – Funktionsweise pom.xml Repository src/

slide-29
SLIDE 29

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

slide-30
SLIDE 30

Die Datenbank-Spezialisten.

Plan RCP-Quellen bestehende Prozesslandschaft ?

slide-31
SLIDE 31

Die Datenbank-Spezialisten.

Maven Release Plugin – Preparation Goals

<preparationGoals>

  • rg.codehaus.mojo:build-helper-maven-plugin:1.8:parse-version
  • rg.eclipse.tycho:tycho-versions-plugin:${tycho.version}:update-pom
  • rg.eclipse.tycho:tycho-versions-plugin:${tycho.version}:set-version
  • DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.

${parsedVersion.incrementalVersion} scm:checkin

  • Dincludes="META-INF/MANIFEST.MF"
  • Dmessage="[maven-release-plugin] sync manifest and pom version

[${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incr ementalVersion}]"

  • Dtycho.mode=maven

</preparationGoals>

slide-32
SLIDE 32

Die Datenbank-Spezialisten.

Maven Release Plugin – Completion Goals

<completionGoals>

  • rg.codehaus.mojo:build-helper-maven-plugin:1.8:parse-version
  • rg.eclipse.tycho:tycho-versions-plugin:${tycho.version}:update-pom
  • rg.eclipse.tycho:tycho-versions-plugin:${tycho.version}:set-version
  • DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.

${parsedVersion.incrementalVersion}.qualifier scm:checkin

  • Dincludes="META-INF/MANIFEST.MF"
  • Dmessage="[maven-release-plugin] sync manifest and pom version

[${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion. incrementalVersion}.qualifier]"

  • Dtycho.mode=maven

</completionGoals>

slide-33
SLIDE 33

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>

slide-34
SLIDE 34

Die Datenbank-Spezialisten.

Target-Definition-Dateien

slide-35
SLIDE 35

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>

slide-36
SLIDE 36

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

slide-37
SLIDE 37

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

slide-38
SLIDE 38

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

slide-39
SLIDE 39

Die Datenbank-Spezialisten.

running-number-plugin-target

 pro möglichem Patchstand ein Tag  Trunk enthält den zurzeit freigegebenen Patchstand  zum Bauen von Hotfixes

slide-40
SLIDE 40

Die Datenbank-Spezialisten.

Continuous Integration Tool

slide-41
SLIDE 41

Die Datenbank-Spezialisten.

Continuous Integration Tool Jenkins Hudson Bamboo

slide-42
SLIDE 42

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

slide-43
SLIDE 43

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

slide-44
SLIDE 44

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>

slide-45
SLIDE 45

Die Datenbank-Spezialisten.

API zur Verfügung stellen Moduljob gav update- target-file-job update- target-file-job SVN target.xml Nexus

slide-46
SLIDE 46

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

slide-47
SLIDE 47

Die Datenbank-Spezialisten.

Module Release

 Maven-release-plugin, Jenkins Maven Release Plug-in Plug-in

slide-48
SLIDE 48

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

slide-49
SLIDE 49

Die Datenbank-Spezialisten.

Third-Party

slide-50
SLIDE 50

Die Datenbank-Spezialisten.

Third-Party Repository erstellen Nexus-Site pom.xml

  • rg.reficio:

p2-maven-plugin P2-Repo cp / scp

slide-51
SLIDE 51

Die Datenbank-Spezialisten.

  • rg.reficio:p2-maven-plugin Beispiel
slide-52
SLIDE 52

Die Datenbank-Spezialisten.

Konfiguration ohne manifest.mf

slide-53
SLIDE 53

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

slide-54
SLIDE 54

Die Datenbank-Spezialisten.

Unit Tests

slide-55
SLIDE 55

Die Datenbank-Spezialisten.

URL-Trigger Test-Job Nexus latest unstable- plugin-target Starte Job Version von Host geändert

slide-56
SLIDE 56

Die Datenbank-Spezialisten.

Unit Tests – warum so kompliziert? SVN-Struktur core core-test Plugin Plugin.test trunk trunk Host … Plugin Test

slide-57
SLIDE 57

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

slide-58
SLIDE 58

Die Datenbank-Spezialisten.

Code-Qualität

slide-59
SLIDE 59

Die Datenbank-Spezialisten.

Code-Qualität SonarQube manuell automatisch PMD Checkstyle Findbugs Sonargraph Inspektion Audit Pair Programming Walkthrough Atlassian Crucible

slide-60
SLIDE 60

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

slide-61
SLIDE 61

Die Datenbank-Spezialisten.

Quality Gates

slide-62
SLIDE 62

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

slide-63
SLIDE 63

Die Datenbank-Spezialisten.

Release Sonar Test Umsetzung Release-Build IS_RELEASEBUILD SNAPSHOT-Build Conditional BuildStep Plugin mvn -B -e sonar:sonar

  • Dsonar.profile="Profilname"
  • Dsonar.qualitygate="QualityGateName"
  • Dsonar.buildbreaker.skip=false
  • Dsonar.branch=release
  • P maven-sonar-release,module-release
slide-64
SLIDE 64

Die Datenbank-Spezialisten.

Weitere Integrationstests

slide-65
SLIDE 65

Die Datenbank-Spezialisten.

Schritte nach Maven-Release

 Integration des Patches auf das Integrationssystem mittels Apache

ANT

 Nach Deployment folgen Integrationstests …

slide-66
SLIDE 66

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

slide-67
SLIDE 67

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.+$

slide-68
SLIDE 68

Die Datenbank-Spezialisten.

Epilog

slide-69
SLIDE 69

Die Datenbank-Spezialisten.

Contra

 Releasen dauert pro Plugin 10 – 15 min  teils große Abhängigkeitsbäume für Patches  viele Jobs im Jenkins

slide-70
SLIDE 70

Die Datenbank-Spezialisten.

Pro

 häufige Integration (trigger durch commit)  schnelles Feedback  relativ genaue Problemzuordnung möglich  automatisierte Quellcodeanalyse  Vorbereitung für modulare Auslieferung

slide-71
SLIDE 71

Die Datenbank-Spezialisten.

Fragen?

Hannes Schmidt

Konfigurationsmanager www.robotron.de

slide-72
SLIDE 72

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

slide-73
SLIDE 73

Die Datenbank-Spezialisten.

Anhang: Tools – Versionen und Plugins

slide-74
SLIDE 74

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

slide-75
SLIDE 75

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

slide-76
SLIDE 76

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

slide-77
SLIDE 77

Die Datenbank-Spezialisten.

Nexus

 Version 2.5.1-01  Nexus p2 Repository Plugin 2.3.2

slide-78
SLIDE 78

Die Datenbank-Spezialisten.

Sonar

 Version 4.5.5  Build Breaker 1.1  Issues Report 1.3