$30 off During Our Annual Pro Sale. View Details »

Schnelle und zuverlässige Builds mit Gradle und Maven

Schnelle und zuverlässige Builds mit Gradle und Maven

Schnelle und zuverlässige Builds haben einen großen Einfluss auf die Produktivität von Entwicklungsteams. Schnellere Builds ermöglichen kürzere Feedbackzyklen durch reduzierte Wartezeiten und weniger Kontextwechsel für Entwickler. Wenn ein Build unzuverlässig ist, müssen Entwickler Zeit investieren und die oftmals sehr schwer nachvollziehbaren Probleme durch wiederholtes Ausführen des Builds beheben. Weiterhin sinkt das Vertrauen der Entwickler in den Build, so dass diese die Optimierungen des Build-Tools ausschalten und dadurch die Buildzeit erhöhen. Z.B. neigen Entwickler dazu bei unzuverlässigen inkrementellen Builds immer Clean auszuführen.

In diesem Vortrag zeigen wir, wie Gradle Enterprise sowohl bei Gradle als auch bei Maven Builds hilft, diese mit dem Build Cache schneller und mit Hilfe von Build Scans zuverlässiger zu machen.

Der Build Cache speichert die Ergebnisse jedes Build-Schritts auf einem Server. Diese gecachten Ergebnisse können dann sowohl von Entwicklern als auch von CI Builds benutzt werden.

Wir gehen auch darauf ein, wie die Geschwindigkeit und die Zuverlässigkeit der einzelnen Build Schritte durch Build Scans erhöht werden kann. Build Scans helfen zu verstehen, wo die Flaschenhälse des Builds sind und liefern wertvolle Daten um die Probleme Ihres Builds zu analysieren und zu beseitigen.

Marc Philipp

June 04, 2019
Tweet

More Decks by Marc Philipp

Other Decks in Programming

Transcript

  1. Schnelle und zuverlässige Builds
    mit Gradle und Maven
    Marc Philipp, Gradle Inc.

    View Slide

  2. Wer bin ich?
    speaker {
    name = "Marc Philipp"
    home = "Karlsruhe, Germany"
    company = "Gradle Inc."
    title = "Senior Software Engineer"
    openSourceRoles = [
    "JUnit team lead"
    ]
    twitter = "@marcphilipp"
    github = "marcphilipp"
    web = uri("https://www.marcphilipp.de")
    }

    View Slide

  3. Gradle Inc.
    Build Happiness
    Products
    Gradle Build Tool
    Gradle Enterprise

    View Slide

  4. Wie beeinflusst der Build die
    Entwicklerproduk vität?
    20% Buildfehlschläge
    Fixen 5‑10% Teamzeit
    Langsam
    Pro Minute 4% Teamzeit
    Unzuverlässig: 5% Teamzeit

    View Slide

  5. Schnelle Builds

    View Slide

  6. Schnelle Builds
    Schneller = weniger machen
    Ergebnisse wiederverwenden!
    Inkrementeller Build
    Build Cache

    View Slide

  7. Inkrementeller Build
    Gradle
    Maven

    View Slide

  8. Inkrementeller Build
    Gradle kann Ergebnisse
    des letzten Mals
    als dieser Build
    auf diesem Computer
    ausgeführt wurde wiederverwenden.

    View Slide

  9. Das geht noch besser!

    View Slide

  10. Wieso nicht…
    von irgendwann
    wenn irgendein Build
    irgendwo ausgeführt wurde.

    View Slide

  11. Noch besser…
    für Maven und Gradle Builds!

    View Slide

  12. View Slide

  13. Build Cache für Gradle
    $> gradle --build-cache assemble
    :compileJava FROM-CACHE
    :processResources
    :classes
    :jar
    :assemble
    BUILD SUCCESSFUL

    View Slide

  14. Build Cache für Gradle
    Standardmäßig für Java, Groovy, Scala, C++ und Swi
    Unterstützt Compile, Test und Verifica on Tasks
    High‑Performance Remote Backend von Gradle
    Docker Hub: gradle/build‑cache‑node

    View Slide

  15. Build Cache für Maven
    Eigene Extension (Teil von Gradle Enterprise)
    Ini ales Release: März 2019
    Unterstützte Plugins: Java Compiler, Surefire/Failsafe,
    Javadoc, JAXB, Checkstyle

    View Slide

  16. Build Cache – Demo

    View Slide

  17. Wie funk oniert der Build Cache?
    Berechne cacheKey eines Tasks/Goals basierend auf
    seinen Inputs:
    cacheKey(javaCompile) = hash(sourceFiles, … )
    Speichere die Outputs unter cacheEntry:
    cacheEntry[cacheKey(javaCompile)] = fileTree(classFiles)
    Gradle task
    Inputs Outputs

    View Slide

  18. Lokaler und Remote Cache

    View Slide

  19. Zuverlässige Builds

    View Slide

  20. Anforderungen
    Daten um Verbesserungen/Verschlechterungen
    festzustellen
    Entwickler‑ und CI‑Builds
    Zuverlässigkeit
    Geschwindigkeit

    View Slide

  21. Was sind Build Scans?
    Aufzeichnung darüber, was in einem Build passiert ist
    Permanente und teilbare URLs
    Für Entwickler und Build Engineers

    View Slide

  22. Gradle
    $> gradle build --scan
    ...
    BUILD SUCCESSFUL in 5s
    143 actionable tasks: 29 executed, 76 from cache, 38 up-to-date
    Publishing build scan...
    https://gradle.com/s/wnftgsuyjleyi

    View Slide

  23. Maven
    (mit in .mvn/extensions.xml registrierter Extension)
    $> mvn clean verify
    ...
    [INFO] -----------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] -----------------------------------------------------------------------
    [INFO] Total time: 5.262 s
    [INFO] Finished at: 2019-04-23T09:55:36+02:00
    [INFO] -----------------------------------------------------------------------
    [INFO] 13 goals, 8 executed, 5 from cache, saving at least 16s
    [INFO]
    [INFO] Publishing build scan...
    [INFO] https://gradle.com/s/ypgljbvelzxzs
    [INFO]

    View Slide

  24. Build Scans – Demo

    View Slide

  25. Build Scans
    Unterstützen Gradle
    und
    Maven
    Öffentliche Scans kostenlos auf
    Gradle Enterprise bietet zusätzliche Features und
    Hos ng auf eigenem Server
    Build Comparison
    Performance Dashboard
    Build Trends
    scans.gradle.com
    h ps:/
    /gradle.com/s/wn gsuyjleyi

    View Slide

  26. Eigene Analysen
    Export API benutzen!
    h ps:/
    /github.com/gradle/build‑analysis‑demo

    View Slide

  27. View Slide

  28. View Slide

  29. Materialien
    Kostenlose Trainings auf , z.B.:
    Build Cache Deep Dive
    Maven + Gradle Enterprise
    Gradle Build Tool:
    Gradle Enterprise:
    gradle.com/training
    YouTube‑Kanal
    h ps:/
    /gradle.org
    h ps:/
    /gradle.com

    View Slide

  30. Vielen Dank!

    View Slide