Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Latest commit

 

History

History
284 lines (211 loc) · 6.2 KB

11-continuous.adoc

File metadata and controls

284 lines (211 loc) · 6.2 KB

Continuous Integration

Integrations Probleme

Integration

Integration

Zusammenfügen von mehreren Komponenten zu einer Software

  • FALSCH: dann würde es eher Continuous Assembly heißen

Integration

Integration

Zusammenfügen der (lokalen) Entwicklung mehrerer Entwicklungszweige

Integration

Wenn mehrere Entwickler parallel am gleichen Code arbeiten:

Wie stellen wir sicher, dass die Software, die bisher jeder nur lokal erstellt hat, auch funktioniert wenn alle Änderungen zusammenfließen?

Problem Bereiche

Merge-Konflikte

Entwickler haben gleichzeitig die gleiche Datei bearbeitet

Kompilier-Konflikte

keine Merge-Konflikte, aber die merged Codebasis kompiliert nicht

Test-Konflikte

keine Merge-Konflikte, keine Kompilier-Konflikte, aber die Tests laufen nicht mehr erfolgreich

Integration

Integration

Code-Basis zweier Entwickler ineinander integrieren um alle Arten von Konfliken zu identifizieren.

Automatisierungs Probleme

Pur

HelloWorldApp.java

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Kompilieren

javac HelloWorldApp.java

Ausführen

java -cp . HelloWorldApp
java -classpath . HelloWorldApp

Pur + Bibliothek

HelloWorldApp.java

import org.apache.commons.lang3.StringUtils;
class HelloWorldApp {
    public static void main(String[] args) {
        String msg = "Hello World!";
        msg = StringUtils.substring(msg, 6)
        System.out.println(msg);
    }
}

Kompilieren

$ javac -cp lib/commons-lang.jar HelloWorldApp.java

Ausführen

$ java -cp lib/commons-lang.jar;. HelloWorldApp
Note

Bei Ausführen unter UNIX: java -cp lib/commons-lang.jar:. HelloWorldApp

Komplizierter

  • Woher kommt commons-lang.jar?

  • Welche Version von commons-lang.jar wird verwendet?

  • Wie viele Bibliotheken verwendet dhbw-painground insgesamt?

  • Antwort: 112

Automatisierung

Kompilieren

Kommandozeile:

javac src/main/java/net/kleinschmager/dhbw/tfe15/painground/PaingroundApplication.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/ui/MainUI.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/ui/views/MemberProfileList.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/persistence/model/MemberProfile.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/persistence/repository/MemberProfileRepository.java

IDE: Menü Projekt > Bereinigen

Verpacken

Kommandozeile

jar cvmf painground.jar src/main/java/net/kleinschmager/dhbw/tfe15/painground/PaingroundApplication.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/ui/MainUI.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/ui/views/MemberProfileList.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/persistence/model/MemberProfile.java \
src/main/java/net/kleinschmager/dhbw/tfe15/painground/persistence/repository/MemberProfileRepository.java

IDE

  • siehe nächste Folie

Verpacken IDE

Nachteile

Kommandozeile

  • nicht übersichtlich

  • unkomfortabel

  • Abhängig von Umgebung

    • javac version

    • Bibliotheken

  • Works on my machine

IDE

  • Abhängig von Umgebung

    • javac version

    • Bibliotheken

    • IDE Konfiguration

  • Works on my machine

Weitere Aufgaben

  • Testen

  • Dokumentation erzeugen

    • Word zu PDF?

    • xyz zu HTML?

  • Upload zum Kunden

  • Bereitstellen DEMO System

Lösung: Automatisierung

  • Build-Tools

    • Ant | Maven | Gradle | CMake

  • Continuous Integration

    • Mindset

  • Continuous Integration Tools

    • Jenkins

    • Travis-CI

    • Team Foundation Server

Continuous Integration

Motivation

In software, when something is painful, the way to reduce the pain is to do it more frequently, not less.

— David Farley

Elemente

  1. Code (und Konfiguration) stehen unter Versionsverwaltung

  2. Build-Prozess ist automatisiert

  3. Regelmäßiges einchecken|commit

    • mind. täglich

Elemente

  1. Tests werden gleichzeitig entwickelt (als Code)

    • stehen ebenfalls unter Versionsverwaltung

    • am besten im gleichen Repository wie der Code selbst

  2. Wichtige Tests sollten bei jedem commit ausgeführt werden

    • andere wenigstens regelmäßig, z.B. nächtlich

  3. eine produktionsnahe Testumgebung steht immer bereit

  4. Einfacher Zugriff auf Ergebnisse auch für Nicht-Entwickler

Vorteile

zehner 10er regel der fehlerkosten

Vorteile

Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.

— Martin Fowler

Vorteile

Continuous Integration

regelmäßiges Kompilieren, Verpacken, Testen, Bereitstellen einer Software

Vorteile

  • Fehler früher finden (Konflikte vermeiden)

  • Feedback für das Entwickler-Team

  • Feedback für das Qualitäts-Management

  • Feedback für die Tester

Continuous Delivery

Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.

— Martin Fowler

Continuous Delivery

There should be two tasks for a human being to perform to deploy software into a development, test, or production environment: to pick the version and environment and to press the “deploy” button.

— David Farley