+ All Categories
Home > Documents > Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse...

Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse...

Date post: 25-Aug-2020
Category:
Upload: others
View: 11 times
Download: 0 times
Share this document with a friend
40
Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse RCP gradle again
Transcript
Page 1: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Catchphrase

09.03.2017 Dresden

CI von Eclipse RCP Anwendungen mit

Gradle/JenkinsJohannes Tandler

Michael Barth

Make Eclipse RCP gradle again

Page 2: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Agenda

1. Eclipse IDE

2. Eclipse RCP

3. Repositories I

4. Architecture

5. Repositories II

6. Gradle/Jenkins/CI

7. BuildMonkey

Page 3: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Visualisierung von MaschinendatenMobile HMI in der Industrie 4.0

Page 4: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

HMI SUITE - MONKEY WORKS GMBH

● Entwicklungsumgebung für Maschinenvisualisierung

○ Eclipse RCP-Applikation

○ Nutzung vieler Eclipse-Technologien

■ Grafische & Textuelle (DSL) Editoren

○ Codegenerierung

● Serverkomponente (ProcessHub)

● Bibliotheken für mobile Plattformen

Page 5: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Der konkrete Fall

Es war einmal … Eclipse

Page 6: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse IDE

● Release 2001 als IDE mit Schwerpunkt JAVA

● 2004 Wechsel auf OSGI-Basis (Equinox)

● Riesiges Universum an Projekten und Distributionen

● Multi - Language Support

Geschichte

Heute

Page 7: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse RCP

● Eclipse zugrundeliegendes Applikationsframework

● Eclipse und jede Variante davon ist eigene RCP - Applikation

● XMind, IBM Rational Developer

● MONKEY WORKS HMI Suite Workbench

● Dependency Injection, Services, Build tooling

Abbildung: Eclipse RCP-Applikation XMind

Page 8: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse RCP

● Produkt = Features + Plugins + Configuration + Assets + Binaries

● Feature = Plugins + Andere Features

● Ein Plugin (Projekt) = Java Bibliothek + zusätzliche Konfiguration

● Eclipse RCP Produkt = Target Platform + Product File + Magie

Theorie

Praxis

Page 9: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse RCP

● Eigenes Buildsystem (PDE)

● Eigenes Dependency- management

○ Als Teil der MANIFEST.MF

● Eigenes Management von Repositories und Nutzung derer

○ Target-Platform Abbildung: Target-Platform Definition

Page 10: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse provisioning platform - P2

● Provisioning Platform für OSGI-Applikationen

● Veröffentlichung mit Eclipse Ganymede

● Als Ersatz des alten Update - Mechanismus

Abbildung: Logo von Eclipse Ganymede

Geschichte

Page 11: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse P2

● Repository

○ Metadata

■ Installable Unit

● Feature

● Plugin

○ Artifact

Abbildung: Begrifflichkeiten in der P2-Domäne

Begriffe

Page 12: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse P2Struktur

● Trennung von

○ Metadaten :Beschreibung von Inhalt und Abhängigkeiten

○ Artefakten :URL, Artefaktgröße, Hash, etc.

● Zentraler Index notwendig

Abbildung: Beispiel eines P2-Repositories

Page 13: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Eclipse P2Architektur

Abbildung: Architektur von Eclipse P2

Page 14: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Maven

● Build-Management-Tool für Java-Projekte

● Deskriptiver Ansatz

● Repository-Format von anderen Buildwerkzeugen adoptiert

○ Umfangreiche Unterstützung

Konvention vor Konfiguration

Geschichte:

● Release 1.0 im Jahr 2002

● Release 3.0 im Jahr 2010

● Aktuell Version 3.3.9

Page 15: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Maven

● Project

○ Pom

○ Dependencies

○ GroupID

● Artifact

Abbildung: Beispiel einer pom.xml aus der offiziellen Mavendokumentation

Begriffe

Page 16: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Maven

Project Object Model

DependencyManager

Project lifecycle

plugin plugin plugin

src gen bin

pom’sM2

Repository

Abbildung: Architektur von Maven

Architektur

Page 17: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

MavenStruktur

● Gesamtes Repository ist an einem Ort gespeichert

● Konvention für Ordnerbenennung

● Buildbeschreibung (Pom) wird mitgespeichert

● Kein zentraler Index notwendig

Abbildung: Beispiel eines Maven Repositories

Page 18: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Build

Das sollte doch ganz einfach sein...

Page 19: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Plugin - Projekt

Problematik

External P2

External M2

Eclipse

MFsrc

Buildtool

Page 20: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Exist. Lösungsansätze

● Umwandlung von Maven- Abhängigkeiten in Eclipse Plugins

● Bereitstellung mit P2-Repository

Eclipse Orbit

Eclipse Projekte

● Verschiedene Eclipse Projekte deployen Artefakte nach Maven Central

Page 21: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Exist. Lösungsansätze

● Sammlung von Maven-Mojos für Eclipse Projekte

● Erlaubt den Zugriff auf P2-Repositories mit Maven

● Erlaubt den Zugriff auf Maven-Abhängigkeiten aus Eclipse-Plugins (m2e)

● Produkterstellung möglich

Tycho

P2

Maven / Tycho

lokalesP2

lokalesM2

Build

M2

Produkt

Abbildung: Funktionsweise von Maven / Tycho

Page 22: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Buildsystem - Alt

● Codebasis XXX.XXX Zeilen

● 3+ Programmiersprachen

● Branchspezifische Builds

● Produktdeployment für Master

➔ Buildzeiten von 2 Stunden➔ Inkonsistente Builds➔ Komplex➔ Keine Abhängigkeitspflege➔ Kein Continuous Delivery

Page 23: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Buildsystem - Wünsche

● Viel kürzere Buildzeiten

● Deployment von Branches möglich

● Leichtere Pflege von Abhängigkeiten durch Entwickler

● Komplette Isolation von Buildzweigen

● “Continuous Delivery”

Page 24: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Lösungsidee

● Reduzierung von Maven

● Buildtool soll sich nach Entwicklung richten nicht andersherum

○ Manifest First

○ Integration von externen Abhängigkeiten in Eclipse

○ Keine exotischen Eclipse-Plugins

● Persistenz von Abhängigkeiten

Wünsche

Page 25: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Lösungsarchitektur

Plugin - Projekt

External P2

External M2

Eclipse

MFsrc

gradle

Internal P2

Internal M2

gradle - build

gradle - p2

gradle - m2

Page 26: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Repositories II

● OSGi-Repository○ Im P2 und M2 Format○ Beinhaltet alle Abhängigkeiten aus Eclipse-Ökosystem○ Unterstützt Branching

● Thirdparty-Repository○ Im P2 und M2 Format○ Umfasst alle Abhängigkeiten aus externen Quellen○ Unterstützt Branching

● Feature/Branch-Repositories○ Im M2 Format○ Umfasst Buildartefakte des jeweiligen Branch

Page 27: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Buildpipeline

Wenn Sie jetzt noch wach sind ...

Page 28: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Gradle/Jenkins/CI

Continuous Integration

SCM

SourceScripts

Development

Build Server

Build Artefacts

Artefact Server

Build Process

Dependen-cies

Eclipse

JavaGradle

Git

Jenkins

Jenkins DSLGradle tasks

MavenArtefacts

Artifactory

Maven Artefacts

Page 29: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Erstellen der Target Platform

Gradle/Jenkins/CI

● gradle publishTargetPlatform

Public P2 Reposi-tories

Mirror task

Artifactory/ Osgi/m2

Artifactory/Osgi/p2

Mavenize task Local Maven Repository

One local P2 Repository

Target Platform

Source Platform

Upload tasks

Target file task

Publish target file task

Git/TargetPlatforms

● gradle createTargetPlatform

● gradle artifactoryUpload_1

● gradle artifactoryUpload_0

● gradle mavenizeP2Repository

● gradle mirrorP2Repository

Page 30: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Erstellen des Third Party Features

Gradle/Jenkins/CI

Maven Reposi-tories

Update site task

Artifactory/ Thirdparty/m2

Artifactory/Thirdparty/p2

Mavenize task Local Maven Repository

One local P2 Repository

Target Platform

Libraries

Upload tasks

Update Target file task

Git/TargetPlatforms

● gradle updateTargetPlatform

● gradle artifactoryUpload_1

● gradle artifactoryUpload_0

● gradle mavenizeP2Repository

● gradle updateSite (bnd-tools)

Page 31: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Gradle/Jenkins/CI

Aufbau eines Features

● Plugins als Unterprojekte● Root Gradle Script, Jenkins Script,

Feature Properties

Aufbau eines Plugins

● Source- Verzeichnis Maven- konform

● Manifest Datei, Eclipse Projekt Dateien, Plugin Properties

Page 32: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Gradle/Jenkins/CI

Bauen eines Features

Feature aus SCM

Gemeinsame Gradle Skripte

build (assemble, test, check)

publish

trigger upstream

Page 33: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Gradle/Jenkins/CI

Erstellen eines Produktes

bnd-tools updateSite

.product

gradle publishProduct

prepareProduct

materialise

Feature list

lokales P2

Produkt

Page 34: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

BuildMonkey

● Open Source Projekt initiiert von MONKEY WORKS● https://github.com/MONKEY-WORKS/BuildMonkey● Ziel ist die Abbildung der gesamten Buildpipeline in gradle● gradle → build.gradle → commons.gradle → Plugins● 4 Hauptprojekte:

○ ArtifactoryUpload○ Compilation○ Repository○ Materialisation

● Mitarbeit ausdrücklich gewünscht

Page 35: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

BuildMonkey

ArtifactoryUpload

● kopiert jede Filestruktur in ein Artifactory Repository

● gradle artifactoryClearRepository● gradle artifactoryUpload_n

Page 36: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

BuildMonkey

Compilation

● ManifestDependencyPlugin● FixDependencyVersion● ModifyBundle

Page 37: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

BuildMonkey

Repository

● P2MirrorPlugin● MavenizerPlugin● P2DeployerPlugin● MavenArtefactsPlugin

Page 38: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

BuildMonkey

Materialisation

● Build Product● Execute Tests

Page 39: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Fazit

● Buildzeiten drastisch reduziert auf 5 Minuten (komplett ca. 30 Minuten)

● Continuous Delivery ist möglich

● Buildskripte sind selten länger als 1 Bildschirmseite und lesbar

● Dependency- Pflege viel einfacher

● Branches nutzen konsistente Umgebung

● Produkte sind auch von Branches aus erstellbar

Page 40: Make Eclipse RCP gradle again CI von Eclipse RCP ......Catchphrase 09.03.2017 Dresden CI von Eclipse RCP Anwendungen mit Gradle/Jenkins Johannes Tandler Michael Barth Make Eclipse

Wir danken für Ihre Aufmerksamkeitund den Projekten Wuff, Buildship,

Tycho und bnd-tools


Recommended