Continuous Integration für 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 Feature A Plugin B Plugin C Plugin A 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.
Projektanalyse vor Eclipse RCP 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.
Continuous Integration 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.
Versionsverwaltung Die Datenbank-Spezialisten.
Versionsverwaltung CVS Git zentralisiert Mercurial verteilt Subversion Bitkeeper Die Datenbank-Spezialisten.
Variante 1 … SCM-Repository A … core-test core branches branches tags tags trunk trunk Plugin.test Plugin Die Datenbank-Spezialisten.
Variante 2 SCM-Repository A core branches tags trunk Plugin Host Test Die Datenbank-Spezialisten.
Repositories Die Datenbank-Spezialisten.
p2 Repository content.xml artifacts.xml Equinox Sub-Projekt features/ Updateseite a.feature_1.0.0.xml Erstellen der Compile- Umgebung plugins/ a.plugin_1.0.0.jar Die Datenbank-Spezialisten.
Maven2 Repository org example example- project lokal 1.0.0 intern öffentlich example-project- 1.0.0.jar example-project- 1.0.0-source.jar Die Datenbank-Spezialisten.
Repository-Manager Die Datenbank-Spezialisten.
Repository-Manager Artifactory Archiva Nexus Die Datenbank-Spezialisten.
Konfiguration Repositories p2-Snapshot- p2-Stable- Repo Repo P2-Capability P2-Capability m2-Snapshot- m2-Stable- p2-Third- Repo Repo party-Repo release deploy special maven Die Datenbank-Spezialisten.
Build-Automatisierung Die Datenbank-Spezialisten.
Build-Automatisierung Eclipse PDE Apache Ant Gradle Apache Maven 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.
Tycho – Funktionsweise content.xml Jar pom.xml Repository manifest.mf Target Plugins src/ Die Datenbank-Spezialisten.
Maven Konfigurationsbaum company-parent tycho-parent project-parent core-parent maskparts-parent masks-parent A B E F D C Parent und Reaktor Die Datenbank-Spezialisten.
Plan ? bestehende RCP-Quellen Prozesslandschaft Die Datenbank-Spezialisten.
Maven Release Plugin – Preparation Goals <preparationGoals> org.codehaus.mojo:build-helper-maven-plugin:1.8:parse-version org.eclipse.tycho:tycho-versions-plugin:${tycho.version}:update-pom org.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> Die Datenbank-Spezialisten.
Maven Release Plugin – Completion Goals <completionGoals> org.codehaus.mojo:build-helper-maven-plugin:1.8:parse-version org.eclipse.tycho:tycho-versions-plugin:${tycho.version}:update-pom org.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> 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.
Target-Definition-Dateien 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.
Continuous Integration Tool Die Datenbank-Spezialisten.
Continuous Integration Tool Bamboo Hudson Jenkins Die Datenbank-Spezialisten.
Jenkins Job Overview nightly nightly nightly core-parent maskparts-parent masks-parent A B E F D C regular regular regular regular regular regular 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 gav update- Moduljob target-file-job update- target.xml SVN target-file-job Nexus Die Datenbank-Spezialisten.
Deployment auf Entwicklungs-Application-Server gav update- gav deploy-to- Moduljob target-file-job applserv-job jar deploy-to- Nexus applserv-job Applserv Die Datenbank-Spezialisten.
Module Release Maven-release-plugin, Jenkins Maven Release Plug-in Plug-in Die Datenbank-Spezialisten.
Recommend
More recommend