Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Build- und Delivery-Pipelines als Code mit Jenkins

Build- und Delivery-Pipelines als Code mit Jenkins

Build Konfigurationen in einem Continuous Integration Werkzeug wie Jenkins können über die Weboberfläche konfiguriert werden. Dokumentation in Form von Kommentaren und Nachvollziehbarkeit kommen dabei zu kurz. Änderungen an der Konfiguration bleiben Spezialisten überlasten, da niemand den Build kaputt machen will.
Dass dies auch anders geht, zeigt die Projekterfahrung mit dem Jenkins Pipeline Plugin: Die komplette Build-Konfiguration ist als Code zusammen mit dem Projekt eingecheckt. Jedes Teammitglied kann Änderungen an der Konfiguration vornehmen und vorab in einem Branch testen. Die Nachvollziehbarkeit ist dabei über die Historie und Commit-Kommentare der Quellcodeverwaltung möglich. Dokumentation im Quellcode der Build-Konfiguration ist dabei ausdrücklich erwünscht!
Der Vortrag gibt zunächst einen kurzen Einstieg in das Pipeline-Plugin. Danach zeichnet er die Erfahrungen in einem agilen Projekt nach und beschreibt die schrittweise Erweiterung des Build-Prozesses im Projektverlauf.

Alexander Schwartz

February 16, 2017
Tweet

More Decks by Alexander Schwartz

Other Decks in Technology

Transcript

  1. .consulting .solutions .partnership
    Build- und Delivery-Pipelines
    als Code mit Jenkins
    Alexander Schwartz, Principal IT Consultant
    Entwicklertag Frankfurt – 16.02.2017

    View Slide

  2. Build- und Delivery-Pipelines als Code mit Jenkins
    2
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
    Rollenverteilung im Projekt
    1
    Jenkins Pipelines
    2
    Demo
    3
    Rezepte
    4
    Projekterfahrungen
    5

    View Slide

  3. Mein Sponsor und Arbeitgeber – msg systems ag
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 3
    Gegründet 1980
    Mehr als 6.000 Mitarbeiter
    727 Millionen € Umsatz 2015
    präsent in
    25 Länder
    18 Büros
    in Deutschland

    View Slide

  4. Wer ich bin – Principal IT Consultant im Geschäftsbereich Travel & Logistics
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 4
    14 Jahre Java
    7 Jahre PL/SQL
    7 Jahre
    Absatzfinanzierung
    3,5 Jahre Direktbank
    1 Frau
    2 Kinder
    501 gefundene
    Geocaches
    @ahus1de

    View Slide

  5. Build- und Delivery-Pipelines als Code mit Jenkins
    5
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
    Rollenverteilung im Projekt
    1
    Jenkins Pipelines
    2
    Demo
    3
    Rezepte
    4
    Projekterfahrungen
    5

    View Slide

  6. Rollenverteilung im Projekt
    Klassische Rollenverteilung in Projekten
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 6
    Build Engineer
    Developer
    XML

    View Slide

  7. Rollenverteilung im Projekt
    Klassische Rollenverteilung in Projekten
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 7
    Developer Build Engineer
    XML
    XML

    View Slide

  8. Rollenverteilung im Projekt
    Herausforderungen
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 8
    • Änderung der Build-Konfiguration nicht auf eine Person beschränken
    • Versionierung der Build-Konfiguration für Nachvollziehbarkeit und Rollback
    • Sicherheitsnetz zum Ausprobieren von Änderungen an der Build-Konfiguration

    View Slide

  9. Build- und Delivery-Pipelines als Code mit Jenkins
    9
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
    Rollenverteilung im Projekt
    1
    Jenkins Pipelines
    2
    Demo
    3
    Rezepte
    4
    Projekterfahrungen
    5

    View Slide

  10. Jenkins Pipelines
    Jenkins Pipelines
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 10
    Version 1.0 verfügbar als Jenkins Workflow Dezember 2014
    Umbenannt in Jenkins Pipeline Januar 2016
    Verfügbar als Plugin für Jenkins 1.x
    Teil der Jenkins Distribution seit Jenkins 2.x

    View Slide

  11. Jenkins Pipelines
    Variante für die Demo
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 11
    • Alle Konfiguration sind in der Datei Jenkinsfile enthalten
    • Build-Konfiguration ist in Groovy geschrieben
    • Jenkinsfile ist im Root des Git-Repositories eingecheckt
    • Multibranch-Pipeline legt für jeden Branch einen Job in einem Folder an

    View Slide

  12. Build- und Delivery-Pipelines als Code mit Jenkins
    12
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
    Rollenverteilung im Projekt
    1
    Jenkins Pipelines
    2
    Demo
    3
    Rezepte
    4
    Projekterfahrungen
    5

    View Slide

  13. Demo
    Demo
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 13

    View Slide

  14. Build- und Delivery-Pipelines als Code mit Jenkins
    14
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
    Rollenverteilung im Projekt
    1
    Jenkins Pipelines
    2
    Demo
    3
    Rezepte
    4
    Projekterfahrungen
    5

    View Slide

  15. Rezepte
    Hello World
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 15
    Alles ist Groovy Code. Ausgabe von Text, Kommentare im Code, Aufruf externen Kommandos
    node {
    echo 'Hello world!
    // Comments are supported!
    sh 'date'
    }

    View Slide

  16. Rezepte
    Pipelines
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 16
    Mehrere Schritte. Einzeln in der GUI dargestellt. Logs separiert pro Stage.
    node {
    stage("one") {
    echo 'Hello world!'
    }
    stage("two") {
    echo 'Goodbye.'
    }
    }

    View Slide

  17. Rezepte
    Fehlerbehandlung
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 17
    Fehlerbehandlung mit try/catch
    node {
    def err = null;
    try {
    /* ... */
    } catch (caughtError) {
    err = caughtError
    currentBuild.result = "FAILURE"
    } finally {
    /* ... */
    if (err) {
    throw err
    }
    }
    }

    View Slide

  18. Rezepte
    E-Mail-Versand
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 18
    E-Mail-Versand unter bestimmten Bedingungen
    if (currentBuild.result != 'SUCCESS' && currentBuild.result != null
    /* && env.BRANCH_NAME == 'master' */ ) {
    def to = emailextrecipients([
    [$class: 'CulpritsRecipientProvider'],
    [$class: 'RequesterRecipientProvider']
    ])
    mail to: to,
    cc: "[email protected]",
    subject: "Jenkins build has finished with ${currentBuild.result}",
    body: "See <${env.BUILD_URL}>"
    }

    View Slide

  19. Rezepte
    Parallele Ausführung
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 19
    Mehrere Stages werden parallel ausgeführt. Schöne Darstellung im „Blue Ocean“ Theme.
    node {
    parallel(
    a: {
    echo "this is branch a"
    },
    b: {
    echo "this is branch b"
    }
    )
    }

    View Slide

  20. Rezepte
    Fehleranalyse
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 20
    Die Log-Dateien können lang werden.
    Für die Fehleranalyse bietet sich das build-failure-analyzer (BFA) Plugin an

    View Slide

  21. Rezepte
    Build parametrisieren
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 21
    Nur die 10 letzten Builds aufheben
    properties([[$class: 'BuildDiscarderProperty',
    strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '',
    artifactNumToKeepStr: '', daysToKeepStr: '',
    numToKeepStr: '10']]])
    node {
    /* ... */
    }

    View Slide

  22. Rezepte
    Daten aufheben
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 22
    Archiver, Publisher für Checkstyle, JUnit und HTML
    archiveArtifacts 'myFiles/*.pdf'
    step([$class: 'JUnitResultArchiver', testResults: '**/surefire-
    reports/*.xml'])
    step([$class: 'CheckStylePublisher', pattern: '**/checkstyle-result.xml',
    unstableTotalAll: '0', usePreviousBuildAsReference: false])
    publishHTML(target: [allowMissing: true, alwaysLinkToLastBuild: false,
    keepAll: true, reportDir: 'yourReportDir', reportFiles: 'yourReportFile',
    reportName: 'yourReportName'])

    View Slide

  23. Rezepte
    Snippet Generator
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 23

    View Slide

  24. Build- und Delivery-Pipelines als Code mit Jenkins
    24
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz
    Rollenverteilung im Projekt
    1
    Jenkins Pipelines
    2
    Demo
    3
    Rezepte
    4
    Projekterfahrungen
    5

    View Slide

  25. Projekterfahrungen
    * ohne mehrfache Änderungen des gleichen Entwicklers an einem Tag
    Projektstatistik eines mittelgroßen Projekts
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 25
    11 Monate Laufzeit
    14 Personen haben das Jenkinsfile geändert
    (80% der Entwickler im Projekt)
    122 Änderungen am Jenkinsfile*

    View Slide

  26. Projekterfahrungen
    Jenkins Pipelines
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 26
    Vorteile:
    • Entwickler können Build-Konfiguration selber ändern, dadurch kein Engpass im Projekt
    • Versionierung der Build-Konfiguration für gute Nachvollziehbarkeit und Rollback
    • Branches als Sicherheitsnetz zum Ausprobieren von Änderungen an der Build-Konfiguration
    • Dokumentation im Code möglich (und erwünscht)
    Nachteile:
    • Für bekannte Funktionen aus der Web-GUI müssen die Script-Befehle neu gesucht werden
    (Snippet Generator kann helfen)
    • Nicht alle Plugins unterstützen Jenkins Pipelines
    (aber es werden ständig mehr)
    @ahus1de

    View Slide

  27. Links
    © msg | Februar 2017 | Entwicklertag Frankfurt | Build- und Delivery-Pipelines | Alexander Schwartz 27
    Jenkins Pipeline:
    https://jenkins.io/doc/book/pipeline/
    @ahus1de

    View Slide

  28. .consulting .solutions .partnership
    Alexander Schwartz
    Principal IT Consultant
    +49 171 5625767
    [email protected]
    @ahus1de
    msg systems ag (Headquarters)
    Robert-Buerkle-Str. 1, 85737 Ismaning
    Germany
    www.msg-systems.com

    View Slide