Skip to content

Latest commit

 

History

History
331 lines (208 loc) · 8.32 KB

File metadata and controls

331 lines (208 loc) · 8.32 KB

Weniger Pipelines, Mehr Spaß!?

Rhein-Main Testing Day 2025 in Eschborn

Notes:

  • Hallo zusammen und willkommen zur Open Space Diskussion über meine These "Weniger Pipelines, Mehr Spaß!?".

Wer bin ich?

Notes:

Mein Name ist Karsten Günther.

Ich bin seit 20 Jahren als Softwareentwickler im Automobilbereich unterwegs.

Von Ada, Embedded C, C++, Perl, Tcl, Python über die Entwicklung von Dev Tools bis hin zu Jenkins Pipelines hab ich schon eine Menge gesehen und gemacht.

Aktuell arbeite ich als Platform Architekt im Rhein-Main-Team der Marquardt GmbH.

Dort geht es um Software-Produktlinien, interne Developer Plattformen, Automatisierung und CI/CD.

--

Was ist meine Agenda?

  • Tue Gutes ...
    • Jenkins/CI in Automotive/Embedded-C
    • Unsere Pipelines und Quality Gates
  • ... und rede darüber!

Notes:

  • Okay, was will ich eigentlich von euch?

  • Eins vorne weg: ich war noch die in so einem Open Space.

  • Ein alter Chef von mir hat immer gesagt: Tue Gutes und rede darüber! (Ich glaube, der Spruch ist von Goethe.)

  • Also mach ich das, tue Gutes ...

  • und erzähle euch von meiner Erfahrung mit Jenkins und CI in der Automotive/Embedded Welt und ...

  • ... wo die Reise mit unseren Pipelines und Quality Gates so hin gehen soll.

  • Tja, und rede darüber! Das würde ich gerne mit euch nach meinen Vortrag ausgiebig tun.


Wo komme ich her?

Back to 2005

18 Jahre zurück

Note:

  • Tja, wo komme ich her?

--

Der Job

  • SW-Entwicklung für Bremsensteuergeräte
  • Embedded C? Das hatten wir doch an der Uni!
  • Es ist dein Code, aber verändere bloß nichts!
  • Always remember: don't break the build!
  • Dem Ingenieur ist nix zu schwör!

Note:

Und der Job?

  • Hacken Embedded C für Bremsensteuergeräte

  • Kein Problem, das hatten wir doch an der Uni.

  • Man bekam Verantwortung für einen Teil des Codes, aber verändern sollte man ihn möglichst nicht.

  • Warum? Don't break the build!

  • Klang schwierig, aber wir hatten ja an der Uni gelernt: Dem Ingenieur ist nix zu schwör!

--

Die Ausgangslage

  • Keine Unit Tests
  • Kein CI, nur nightly builds
  • Viele Integrationstests, hauptsächlich Fahrversuch
  • Code Reuse über alle Projekte
  • Mehrere 100 Entwickler weltweit an einer Codebasis

Note:

Die Ausgangslage?

click

Oha, keine Unit Tests.

Keine einige Zeile Testcode im Repository.

Klar, wo testet man Bremsen? Im Auto.

click

Gut, es wurde ein bisschen SIL und HIL gemacht.

click

Aber das meiste wurde im Fahrversuch getestet.

Viele Features waren also irgendwann, irgendwo in irgendeinem Projekt getestet.

Daher das Motto: besser nichts ändern.

click

Aber wie soll das gehen, wenn der Code über alle Projekte geshared ist,

alle Kunden mit neuen Anforderungen um die Ecke kommen ..

click

und mehrere 100 Entwickler weltweit an einer Codebasis arbeiten?

--

Der Traum: eine SW Factory

--

Jenkins School of Witchcraft and Wizardry

Note:

  • Die Krux mit den Jenkins Pipelines
    • Java-Entwickler, die einfach Java programmieren wollen
    • Und es dann nicht dürfen!
    • Viele Missverständnisse, was wo ausgeführt wird
    • Keiner versteht mehr, wie die Pipeline funktioniert.
    • Keiner kann debuggen.
    • Keiner kann es nachvollziehen.
    • Anti-Pattern von CI.
  • 2 Scrum Teams waren zu wenigstens 50% mit Maintenance ausgelastet.
  • Es ging die "Service Card" um.

--

Freestyle Happiness

Note:

Klar, wenn man mit Jenkins startet, geht es mit einfachen freestyle jobs los.

Einfach nur bauen.

--

Freestyle Faith

Note:

  • dann passiert plötzlich doch ein bisschen mehr
  • nach und nach müssen Tools zusammengeklebt werden
  • Anbindung ans SCM System
  • Reporting

--

Holy Moly Groovy Pipelines

--

Note: Höher, schneller, weiter: Eine Pipeline, um sie alle zu knechten.

--

Law of the Instrument

  • Pipeline als Ersatzbuildsystem
  • Buildlogik in Pipelines (10000e Zeilen Groovy DSL)
  • Ausreichend? Nein! Shared Libraries und Plugins gibt es ja auch noch ...
  • Nicht nachvollziehbare CI Ergebnisse
  • Worst case: getrennte Repos für Produkt und Pipelines

Note:

  • CI-System macht andere/mehr Sachen als die Buildumgebung.
  • Mit dem Hammer in der Hand sieht die Welt wie ein Haufen von Nägeln aus.
  • Birmingham screwdriver

--

Continuous Complexity


Wo will ich hin?

  • Pipeline as Code
  • Dependencies as Code
  • Quality Checks as Code
  • Everything else as Code

Note:

--

Pipeline Happiness?

  • Checkout vom Repository
  • Installation aller Abhängigkeiten
  • Ausführen ausgewählter Tests als Quality Checks
  • Archivieren der Ergebnisse

--

Jenkins

...

node() {
    stage("Checkout Code") {
        checkout scm
    }

    stage("Installation of Dependencies") {
        bat "call build.bat -install -installOptional || exit /b 1"
    }

    stage ("Execute Tests") {
        bat "call build.bat -selftests -marker 'build_debug or reports' || exit /b 1"
    }

    stage("Deploy Test Results") {
        junit allowEmptyResults: false, keepLongStdio: false, testResults: "test/output/test-report.xml"
    }

    ...
}

...

--

GitHub Actions

...

jobs:
  test:
    name: CI Gate
    runs-on: windows-latest

    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Installation of Dependencies
        run: |
          .\build.ps1 -install
        shell: powershell
      - name: Execute Tests
        run: |
          .\build.ps1 -selftests -marker "build_debug or reports"
        shell: powershell
      - name: Deploy Test Results
        uses: EnricoMi/publish-unit-test-result-action/windows@v2
        if: always()
        with:
          files: |
            test/output/test-report.xml

...

... und redet darüber!

  • Feedback welcome!
  • Ich hab gehört, Jenkins ist tot! Wirklich?
  • Wie sehen eure Pipelines so aus?
  • Habt ihr Spaß mit CI?

https://xxthunder.github.io/RheinMainTestingDay2025/