SlideShare ist ein Scribd-Unternehmen logo
Dragan Zuvic | w11k
Continuous Integration
mit Java & JavaScript
Dragan Zuvic
@dzuvic
w11k.de
thecodecampus.de
Agenda
Motivation
Problemstellung
Kategorien
Demo & Erfahrung
Kein „Best Practice“ | Rezept | Maven | CD
CI
Grady Booch (1994):
Integration aller Komponenten
Automatische Qualitätskontrolle
Unit Testing
Integrationstests
System Test
Akzeptanz Test
CI
CD
Motivation
Routing „Server“ Routing „Browser“
Problemstellung
Use-Case: SPA mit Java Backend
➔ M & V & C im Browser
➔ Logik im Browser → Unittests ?
Integrationsproblem
Neue Tools, Neue Compiler
Neue Artefakte
Neue Repositories
Problemkategorien
Buildsystem
Repository
Dependency
Struktur
Flexibilität, Version, OS
Format, Netz, Kontrolle
Versionsordnung, Tiefe
Versionsmaster, Propagierung
Separate Projektstruktur
Unabhängige Projekte
– Einzeln Gebaut
– Einzeln Versioniert
– Problem: Versionspropagierung
– Snapshot Problem
common:1
CRM:1.2
Produkt:2
NewUI:0.1
WAR:2015.Q1
Projektstruktur Integriert
Ein Zusammenhängendes Projekt
– Zusammen gebaut
– Eine Version
– Problem: Große Projekte / Baulänge
SalesApp:15.Q1
CRM
Produkt
NewUI
WAR
JS Projekt Anatomie
JS
– Ein JS & HTML
– Assets
Generieren (CSS)
„Transpilieren“
Konkatenieren
Minifizieren
Java
– Bytecode
– Modell: JWE AR
Generieren (JAVA)
Compilieren
Paketieren
Typische Schritte
Tool Chain
JS
Node.js
Grunt, Gulp (uvm)
Bower / NPM
Ruby (compass)
Python (gyp)
Java (selenium)
GCC | Xcode
Java
JDK
Maven|Gradle|Ant
Integration – „kein Rezept“
Master-Tool
JS | JAVA | make
Tool-Verteilung
zentral | manuell
Paketsystem
GEM | JAR | rpm
cabal | NIX | deb
Ziel-Archiv
WAR | docker | ...
WAR-Archiv
webapp | separat
Entwicklung
Reload | Deploy
Integration Buildsystem
Task Basiert {ant}
Definition von
Integrationstasks
Projektmodel {mvn}
Erweiterung
Modells (Plugins)
Fixiert
Aufruf BS
Task + Model
Plugins
Integrationstasks
JS Artefakte mit JAVA
✔gradle-compass
✔gradle-js-plugin
✔gradle-css-plugin
Analog mvn (oos)
✗ Test (Jasmin)
✗ E2E (protractor)
✗ ng-annotate
✗ Typescript / ES6
✗ Ng-doc
...
Master der JS Artefakte
JAVA (gradle & co)
➢ Paralleluniversum
Integriert
JS (grunt & co)
➢ Duales System
Flexibel
●
Systemgrenze
●
Feature
●
Teams ...
Integration Grunt
Simple Call (Maven: ant-tasks)
– Lifecycle → Task ?
– Versionsmaster ?
– Installation von Node?
Gradle Plugin
– Installiert Node
– Task: grunt → gradle
– Versionsmaster via task
Repository
Funktionen: Caching, Kontrolle, Netz
Internes Repo
Private Pakete (Keine Veröffentlichung)
Versionsstabilität (Internet „gelöscht“)
Paketformate
Maven & Ivy | NPM & Bower
NPM & Bower
NPM
node.js Paket-Mgr.
Build tool
Dependencies: node_modules rekursiv
Bower
Ziel: Client-Entwicklung
Repository Format = Git Repo !
Dependencies Flach: bower_components
Internes Repo: JAVA
Maven & Ivy:
Lokale & Remote
Artifactory OSS
Nexus OSS
Archiva
webjars.org
compile 'org.webjars:jquery:2.1.3'
Internes Repo: JS
NPM
Nexus OSS (Ablage) ↔ sinopia (Cache)
URL via Scope
PublishConfig: {"registry":"…"}
Bower
Git + Tag als Paketformat → ??
registry:"http://localhost:8000"
git clone # private-bower
Beispielprojekt Triton
common: Schnittstellen-Definition
client: JS Projekt: grunt, npm, fabs
service: Rest-Implementation
server: Integrationsprojekt
client & service = web-fragments
➔https://github.com/w11k/triton
Projekte
Öffentliche Verwaltung:
• Migration von Ant nach Gradle
• Monolitischer Build
• Modularisiert (Grunt Modul + Grunt Plugin)
• Großteil nach AngularJS migriert
2 x DAX-Konzern:
• Maven Build, Integration mit ant-run,
Release-Skript
• Grunt (Fabs) Integration mit Gradle
Fazit + IMHO
Integration der JS Toolchain
– Vermeidung der Parallelwelt
Stabile Versionen (Gradle, Node)
– Versionsordnung & Versionsmaster
Build unabhängig vom OS
– Less statt SASS
Lokales Repo ermöglichen
– Bower vermeiden (aktuell)
– Paketformat (JAR vs. TAR) → Nutzer
Fragen
Dragan Zuvic
@dzuvic
w11k.de
thecodecampus.de

Weitere ähnliche Inhalte

PPT
Gwt Techtalk Präsentation
PDF
Continuous Integration mit Hudson
PDF
Ü̈ber Ant und Maven zu SBT und Gradle
PDF
Maven2 - Die nächste Generation des Buildmanagements?
PDF
Grails im Überblick und in der Praxis
PPTX
Introduction to Apache Maven 3 (German)
PPTX
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
PPS
Einführung Maven
Gwt Techtalk Präsentation
Continuous Integration mit Hudson
Ü̈ber Ant und Maven zu SBT und Gradle
Maven2 - Die nächste Generation des Buildmanagements?
Grails im Überblick und in der Praxis
Introduction to Apache Maven 3 (German)
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Einführung Maven

Was ist angesagt? (20)

PPTX
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
PDF
Einführung in Puppet und Vagrant
PDF
Kann ich mit Grails Enterprise Applikationen umsetzen?
PDF
Google Web Toolkit
PDF
PDF
Jenkins Acceleration
PPT
PDF
Enterprise 2.0 Portale mit Grails. Geht das?
KEY
Informatik Seminar Groovy Und Grails
PDF
Jug nbg containerplattform dcos
PDF
Continuous Delivery - Aber Sicher?!
PDF
ColdFusion im Enterprise Umfeld - Deep Dive
PPTX
Citrix Fit4Cloud Reihe: Citrix XenServer in der Cloud
PDF
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
PDF
Web-Performance-Optimierung mit varnish
PDF
Deployment 2.0
PPTX
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
PDF
Arquillian
PPTX
Build Patterns - Patterns und Best Practices für den Build Prozess
PDF
Deployment pipeline mit maven, chef und jenkins
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
Einführung in Puppet und Vagrant
Kann ich mit Grails Enterprise Applikationen umsetzen?
Google Web Toolkit
Jenkins Acceleration
Enterprise 2.0 Portale mit Grails. Geht das?
Informatik Seminar Groovy Und Grails
Jug nbg containerplattform dcos
Continuous Delivery - Aber Sicher?!
ColdFusion im Enterprise Umfeld - Deep Dive
Citrix Fit4Cloud Reihe: Citrix XenServer in der Cloud
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Web-Performance-Optimierung mit varnish
Deployment 2.0
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Arquillian
Build Patterns - Patterns und Best Practices für den Build Prozess
Deployment pipeline mit maven, chef und jenkins
Anzeige

Andere mochten auch (18)

ODP
Leichtgewichtige Webwenwendungen mit dem MEAN-Stack
PDF
WJAX 2012 - Web Apps With AngularJS
PDF
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
PDF
Web Applications with AngularJS
PPS
2009 12 London
DOC
Dianne rogers cv march 2016
PPT
Dohdemo
PDF
Fail Festival DC 2015
PPT
Wells Community AcademyPresentation
PPTX
Presentacion de hardware
ODP
Bidirektionale Verbindungen für Webanwendungen
PDF
Tutorial: Develop Mobile Applications with AngularJS
PPS
Ch01 Kotabe
PPTX
Competitive Intelligence in the Digital Age
PDF
Legacy WebApps mit AngularJS pimpen
PDF
Webanwendungen mit Apache HBase entwickeln
PDF
Ajax, Comet & Co.
PDF
Concurrency Paradigmen
Leichtgewichtige Webwenwendungen mit dem MEAN-Stack
WJAX 2012 - Web Apps With AngularJS
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
Web Applications with AngularJS
2009 12 London
Dianne rogers cv march 2016
Dohdemo
Fail Festival DC 2015
Wells Community AcademyPresentation
Presentacion de hardware
Bidirektionale Verbindungen für Webanwendungen
Tutorial: Develop Mobile Applications with AngularJS
Ch01 Kotabe
Competitive Intelligence in the Digital Age
Legacy WebApps mit AngularJS pimpen
Webanwendungen mit Apache HBase entwickeln
Ajax, Comet & Co.
Concurrency Paradigmen
Anzeige

JAX 2015 - Continuous Integration mit Java & Javascript