Top Banner
Dragan Zuvic | w11k Continuous Integration mit Java & JavaScript
24

JAX 2015 - Continuous Integration mit Java & Javascript

Jan 14, 2017

Download

Software

dzuvic
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: JAX 2015 - Continuous Integration mit Java & Javascript

Dragan Zuvic | w11k

Continuous Integration mit Java & JavaScript

Page 2: JAX 2015 - Continuous Integration mit Java & Javascript

Dragan Zuvic

@dzuvic

w11k.de

thecodecampus.de

Page 3: JAX 2015 - Continuous Integration mit Java & Javascript

Agenda

Motivation

Problemstellung

Kategorien

Demo & Erfahrung

Kein „Best Practice“ | Rezept | Maven | CD

Page 4: JAX 2015 - Continuous Integration mit Java & Javascript

CI

Grady Booch (1994):

Integration aller Komponenten

Automatische Qualitätskontrolle

Unit TestingIntegrationstestsSystem TestAkzeptanz Test

CI

CD

Page 5: JAX 2015 - Continuous Integration mit Java & Javascript

Motivation

Routing „Server“ Routing „Browser“

Page 6: JAX 2015 - Continuous Integration mit Java & Javascript

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

Page 7: JAX 2015 - Continuous Integration mit Java & Javascript

Problemkategorien

Buildsystem

Repository

Dependency

Struktur

Flexibilität, Version, OS

Format, Netz, Kontrolle

Versionsordnung, Tiefe

Versionsmaster, Propagierung

Page 8: JAX 2015 - Continuous Integration mit Java & Javascript

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

Page 9: JAX 2015 - Continuous Integration mit Java & Javascript

Projektstruktur Integriert

Ein Zusammenhängendes Projekt– Zusammen gebaut– Eine Version– Problem: Große Projekte / Baulänge

SalesApp:15.Q1

CRM

Produkt

NewUI

WAR

Page 10: JAX 2015 - Continuous Integration mit Java & Javascript

JS Projekt Anatomie

JS– Ein JS & HTML– Assets

Generieren (CSS)

„Transpilieren“

Konkatenieren

Minifizieren

Java– Bytecode– Modell: JWE AR

Generieren (JAVA)

Compilieren

Paketieren

Typische Schritte

Page 11: JAX 2015 - Continuous Integration mit Java & Javascript

Tool Chain

JS

Node.js

Grunt, Gulp (uvm)

Bower / NPM

Ruby (compass)

Python (gyp)

Java (selenium)

GCC | Xcode

Java

JDK

Maven|Gradle|Ant

Page 12: JAX 2015 - Continuous Integration mit Java & Javascript

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

Page 13: JAX 2015 - Continuous Integration mit Java & Javascript

Integration Buildsystem

Task Basiert {ant} Definition von

Integrationstasks

Projektmodel {mvn} Erweiterung

Modells (Plugins)

FixiertAufruf BS

Task + Model Plugins

Integrationstasks

Page 14: JAX 2015 - Continuous Integration mit Java & Javascript

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

...

Page 15: JAX 2015 - Continuous Integration mit Java & Javascript

Master der JS Artefakte

JAVA (gradle & co)➢ Paralleluniversum

Integriert

JS (grunt & co)➢ Duales System

Flexibel● Systemgrenze● Feature● Teams ...

Page 16: JAX 2015 - Continuous Integration mit Java & Javascript

Integration Grunt

Simple Call (Maven: ant-tasks)– Lifecycle → Task ?– Versionsmaster ?– Installation von Node?

Gradle Plugin– Installiert Node– Task: grunt → gradle– Versionsmaster via task

Page 17: JAX 2015 - Continuous Integration mit Java & Javascript

Repository

Funktionen: Caching, Kontrolle, Netz

Internes Repo Private Pakete (Keine Veröffentlichung)

Versionsstabilität (Internet „gelöscht“)

Paketformate

Maven & Ivy | NPM & Bower

Page 18: JAX 2015 - Continuous Integration mit Java & Javascript

NPM & Bower

NPM node.js Paket-Mgr.

Build tool

Dependencies: node_modules rekursiv

BowerZiel: Client-Entwicklung

Repository Format = Git Repo !

Dependencies Flach: bower_components

Page 19: JAX 2015 - Continuous Integration mit Java & Javascript

Internes Repo: JAVA

Maven & Ivy:Lokale & Remote

Artifactory OSS

Nexus OSS

Archiva

webjars.orgcompile 'org.webjars:jquery:2.1.3'

Page 20: JAX 2015 - Continuous Integration mit Java & Javascript

Internes Repo: JS

NPMNexus OSS (Ablage) ↔ sinopia (Cache)

URL via Scope

PublishConfig: {"registry":"…"}

BowerGit + Tag als Paketformat → ??

registry:"http://localhost:8000"

git clone # private-bower

Page 21: JAX 2015 - Continuous Integration mit Java & Javascript

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

Page 22: JAX 2015 - Continuous Integration mit Java & Javascript

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

Page 23: JAX 2015 - Continuous Integration mit Java & Javascript

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

Page 24: JAX 2015 - Continuous Integration mit Java & Javascript

Fragen

Dragan Zuvic

@dzuvic

w11k.de

thecodecampus.de