Skip to content

Commit 4efd2eb

Browse files
committed
Slides after final review
1 parent 341ba7b commit 4efd2eb

33 files changed

+386
-19
lines changed

images/aspice-1.png

572 KB
Loading

images/aspice-2.png

539 KB
Loading

images/autosar-rte.png

401 KB
Loading

images/back_to_the_past.png

2.92 MB
Loading

images/freestyle-faith-2.png

47.3 KB
Loading

images/freestyle-faith.png

67.6 KB
Loading

images/freestyle-happiness.png

49.6 KB
Loading

images/gatekeeper.jpeg

143 KB
Loading

images/gipfel_der_freude.jpg

163 KB
Loading

images/held_der_tastatur.jpeg

185 KB
Loading

images/holy-moly-pipelines.png

125 KB
Loading

images/jenkins-magic.png

2.24 MB
Loading

images/jenkinstein.jpg

87.2 KB
Loading

images/karsten.jpg

272 KB
Loading

images/kind_im_brunnen.jpg

231 KB
Loading

images/matthias.png

1.72 MB
Loading

images/pipeline-happiness.png

48.8 KB
Loading

images/pipeline-lotr.png

2.51 MB
Loading

images/sad-developer.png

1.48 MB
Loading

images/snowflakes.png

2.45 MB
Loading

images/sw_factory.jpg

217 KB
Loading

images/system-overview.png

1.78 MB
Loading

images/tal_der_traenen.jpg

210 KB
Loading

images/weight.png

124 KB
Loading

index.html

+16-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<meta charset="utf-8">
66
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
77

8-
<title>My Presentation Template</title>
8+
<title>Eine CI Reise oder Weniger Pipelines, mehr Spaß</title>
99

1010
<link rel="stylesheet" href="reveal.js/dist/reset.css">
1111
<link rel="stylesheet" href="reveal.js/dist/reveal.css">
@@ -19,11 +19,22 @@
1919
<body>
2020
<div class="reveal">
2121
<div class="slides">
22-
<section>
23-
<h2>My Presentation Template</h2>
24-
(using <a href="https://revealjs.com/">reveal.js</a>)
22+
<section data-markdown="slides/01_eine-ci-cd-reise.md" data-separator="^\r?\n---\r?\n$"
23+
data-separator-vertical="^\r?\n--\r?\n$">
24+
</section>
25+
<section data-markdown="slides/02_wer-sind-wir.md" data-separator="^\r?\n---\r?\n$"
26+
data-separator-vertical="^\r?\n--\r?\n$">
27+
</section>
28+
<section data-markdown="slides/03_wo-kommen-wir-her.md" data-separator="^\r?\n---\r?\n$"
29+
data-separator-vertical="^\r?\n--\r?\n$">
30+
</section>
31+
<section data-markdown="slides/04_software-factory.md" data-separator="^\r?\n---\r?\n$"
32+
data-separator-vertical="^\r?\n--\r?\n$">
33+
</section>
34+
<section data-markdown="slides/05_was-haben-wir-falsch-gemacht.md" data-separator="^\r?\n---\r?\n$"
35+
data-separator-vertical="^\r?\n--\r?\n$">
2536
</section>
26-
<section data-markdown="slides/01.md" data-separator="^\r?\n---\r?\n$"
37+
<section data-markdown="slides/06_wie-geht-es-richtig.md" data-separator="^\r?\n---\r?\n$"
2738
data-separator-vertical="^\r?\n--\r?\n$">
2839
</section>
2940
</div>

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

slides/01.md

-13
This file was deleted.

slides/01_eine-ci-cd-reise.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Eine CI Reise
2+
3+
oder
4+
5+
Weniger Pipelines, Mehr Spaß!

slides/02_wer-sind-wir.md

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
## Wer sind wir?
2+
3+
--
4+
5+
![Matthias](images/matthias.png) <!-- .element width="40%" -->
6+
7+
Matthias Eggert
8+
9+
--
10+
11+
![Karsten](images/karsten.jpg) <!-- .element width="30%" -->
12+
13+
Karsten Günther

slides/03_wo-kommen-wir-her.md

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
## Wo kommen wir her?
2+
3+
Back to 2005
4+
5+
![18 Jahre zurück](images/back_to_the_past.png) <!-- .element width="50%" -->
6+
7+
--
8+
9+
## Die Automobilindustrie
10+
11+
- Spannende Produkte <!-- .element: class="fragment" -->
12+
- Ständig neue Anforderungen <!-- .element: class="fragment" -->
13+
- Gut bezahlte Jobs <!-- .element: class="fragment" -->
14+
- Das Paradies für SW Entwickler <!-- .element: class="fragment" -->
15+
16+
--
17+
18+
## Der Job
19+
20+
- SW-Entwicklung für Bremsensteuergeräte <!-- .element: class="fragment" -->
21+
- Embedded C? Das hatten wir doch an der Uni! <!-- .element: class="fragment" -->
22+
- Es ist dein Code, aber verändere bloß nichts! <!-- .element: class="fragment" -->
23+
- Always remember: don't break the build! <!-- .element: class="fragment" -->
24+
- Dem Ingenieur ist nix zu schwör! <!-- .element: class="fragment" -->
25+
26+
--
27+
28+
## Die Ausgangslage
29+
30+
- Keine Unit Tests <!-- .element: class="fragment" -->
31+
- Ein bisschen SIL und HIL <!-- .element: class="fragment" -->
32+
- Ganz viel Fahrversuch <!-- .element: class="fragment" -->
33+
- Code Reuse über alle Projekte <!-- .element: class="fragment" -->
34+
- Mehrere 100 Entwickler weltweit an einer Codebasis <!-- .element: class="fragment" -->
35+
36+
Note:
37+
- Klar, wo testet man Bremsen? Im Auto.
38+
- Irgendwann, irgendwo in irgendeinem Projekt getestet
39+
- Code in (teils unbekannten) Projekten wiederverwendet
40+
- Die Bugs lauern überall
41+
42+
--
43+
44+
<!-- .slide: data-visibility="hidden" -->
45+
46+
## Die Tools
47+
48+
- MKS / PTC Integrity oder "RCS on Steroids" <!-- .element: class="fragment" -->
49+
- GNU Make / MSYS in Java GUI auf Windows 2000 <!-- .element: class="fragment" -->
50+
- Build Server auf ESX / VMWare <!-- .element: class="fragment" -->
51+
- Remote Builds <!-- .element: class="fragment" -->
52+
- Nightly Builds <!-- .element: class="fragment" -->
53+
54+
Note:
55+
- User konnte remote Builds per GUI triggern
56+
- Nightly Builds automatisch
57+
58+
--
59+
60+
## Continuous What?
61+
62+
![](images/kind_im_brunnen.jpg) <!-- .element: width="40%" class="fragment" data-fragment-index="1" -->
63+
64+
Continuous "Kind im Brunnen" <!-- .element: class="fragment" data-fragment-index="1" -->
65+
66+
Note:
67+
- Irgendein Projekt immer rot (Compile- oder Link-Fehler)
68+
- Höchstes Qualitätskriterium: SW linkbar
69+
- Natürlich gab es Codeänderungen, Blaming und Shitstorm inclusive
70+
- Kritische Änderungen
71+
- Keine Testautomatisierung
72+
- Kein CI/CD
73+
- Keine Unittests (Embedded testet man Embedded)
74+
- Entwickler sind böse, die bauen Bugs in den Code.
75+
76+
--
77+
78+
<!-- .slide: data-visibility="hidden" -->
79+
80+
## Der Prozess: ASPICE
81+
82+
![](images/aspice-1.png) <!-- .element width="80%" -->
83+
84+
Note:
85+
- wird nur als Last angesehen
86+
- Entwicklung läuft richtig, da muss nichts geändert werden.
87+
- Wer soll die ganzen Dokumente erzeugen?
88+
- So viel Zeit haben wir gar nicht.
89+
90+
--
91+
92+
![Tal der Tränen](images/tal_der_traenen.jpg) <!-- .element width="65%" -->
93+
94+
Note:
95+
- Und man fand sich oft im "Tal der Tränen" wieder.

slides/04_software-factory.md

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
## Wir müssen was ändern!
2+
3+
### Aber was?
4+
5+
Aufbau einer Software Factory (2011-2021) <!-- .element: class="fragment" -->
6+
7+
--
8+
9+
SW Änderungen nur bis 12 Uhr mittags, danach Bugfixing und Testen beim Fahrversuch.
10+
11+
![](images/sad-developer.png) <!-- .element width="40%" -->
12+
13+
So funktioniert es nicht!
14+
15+
--
16+
17+
## Unit Testing ist ein guter Anfang.
18+
19+
- Mit eigenem Framework basierend auf CUnit <!-- .element: class="fragment" -->
20+
- Test Driven Development (TDD) <!-- .element: class="fragment" -->
21+
- Automatische Generierung von Mockups <!-- .element: class="fragment" -->
22+
- Nightly Tests auf Jenkins (und Hudson!) <!-- .element: class="fragment" -->
23+
24+
--
25+
26+
## Continuous Integration klingt auch nett.
27+
28+
- Gerrit für Toolentwicklung <!-- .element: class="fragment" -->
29+
- Feature-based Testing via Commit Kommentare <!-- .element: class="fragment" -->
30+
- SW Entwicklung weiterhin auf RCS. <!-- .element: class="fragment" -->
31+
- Eine Bastellösung folgt der Nächsten! <!-- .element: class="fragment" -->
32+
33+
--
34+
35+
## No git? <!-- .element: class="r-fit-text" -->
36+
37+
## No mercy! <!-- .element: class="r-fit-text fragment" style="color:red" -->
38+
39+
--
40+
41+
Was wir erschaffen wollten:
42+
43+
![](../images/sw_factory.jpg) <!-- .element height="60%" width="60%" -->
44+
45+
--
46+
47+
Das Monster, dass dabei rauskam:
48+
![](images/jenkinstein.jpg) <!-- .element height="50%" width="50%" -->
49+
50+
Note:
51+
- Klammer um alle separaten Buildumgebungen
52+
- Target Build
53+
- Unit Tests
54+
- Statische Codeanalyse
55+
- Java, Bash, Perl, Python, Groovy
56+
- Code Generatoren:
57+
- AutoSAR
58+
- proprietäre Konfiguration und Parametrisierung
59+
60+
--
61+
62+
Jenkins School of Witchcraft and Wizardry
63+
64+
![](images/jenkins-magic.png) <!-- .element height="60%" width="60%" -->
65+
66+
Note:
67+
68+
- Die Krux mit den Jenkins Pipelines
69+
- Java-Entwickler, die einfach Java programmieren wollen
70+
- Und es dann nicht dürfen!
71+
- Viele Missverständnisse, was wo ausgeführt wird
72+
- Keiner versteht mehr, wie die Pipeline funktioniert.
73+
- Keiner kann debuggen.
74+
- Keiner kann es nachvollziehen.
75+
- Anti-Pattern von CI.
76+
- 2 Scrum Teams waren zu wenigstens 50% mit Maintenance ausgelastet.
77+
- Es ging die "Service Card" um.
78+
79+
--
80+
81+
<!-- .slide: data-visibility="hidden" -->
82+
83+
### Thema: Skalierbarkeit
84+
85+
- Klassische IT hat ESX / VMWare im Bauchladen <!-- .element: class="fragment" -->
86+
- 500 Statische Windows Server VMs <!-- .element: class="fragment" -->
87+
- 2 Millionen Euro in Bare-Metal versenkt <!-- .element: class="fragment" -->
88+
- Kombination von CI/CD, Nightly Builds und on-demand Builds <!-- .element: class="fragment" -->
89+
90+
--
91+
92+
<!-- .slide: data-visibility="hidden" -->
93+
94+
### Die Sicht eines Anwenders:
95+
96+
"Meine Komponente ist so komplex und kann nur komplett im Verbund getestet werden. Ist mir egal, ob es 10 oder 100 Kundenprojekte gibt, das muss die Software Factory können."
97+
98+
--
99+
100+
<!-- .slide: data-visibility="hidden" -->
101+
102+
### Die Erlösung: GitHub Enterprise
103+
104+
- ... ist keine Erlösung. <!-- .element: class="fragment" -->
105+
- Mono-Repo skalierte nicht. <!-- .element: class="fragment" -->
106+
- Testaufwand für jede Änderung zu hoch. <!-- .element: class="fragment" -->
107+
- 24/7 Auslastung der Buildagents <!-- .element: class="fragment" -->
108+
- Teilweise mussten nightly builds auf den Vorgänger warten <!-- .element: class="fragment" -->
109+
- Kann man bei 24h noch von nightly builds reden? <!-- .element: class="fragment" -->
110+
- Webportal zur Anzeige der Ergebnisse der Builds (immer rot) <!-- .element: class="fragment" -->
111+
112+
--
113+
114+
<!-- .slide: data-visibility="hidden" -->
115+
116+
### Und was macht eigentlich die Toolabteilung?
117+
118+
- Tool Dependency Handling mit eigenem Paketmanager (Hack in Java) <!-- .element: class="fragment" -->
119+
- Hybridcloud: on-premise und AWS/EC2 <!-- .element: class="fragment" -->
120+
- 2 Scrum Teams waren zu wenigstens 50% mit Maintenance ausgelastet. <!-- .element: class="fragment" -->
121+
- Es ging die "Service Card" um. <!-- .element: class="fragment" -->
122+
- GitHub Enterprise Instanz andauernd am Limit. <!-- .element: class="fragment" -->
+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
## Was haben wir eigentlich alles falsch gemacht?
2+
3+
Zunächst lief alles gut ...
4+
5+
--
6+
7+
## Freestyle Happiness
8+
9+
![](images/freestyle-happiness.png) <!-- .element width="80%" -->
10+
11+
Note:
12+
- starten mit sehr einfachen freestyle jobs
13+
- keine Logik
14+
- Einfach nur bauen
15+
- nicht mal SCM --> PC auf dem Schreibtisch eines Kollegen, da ist alles drauf
16+
17+
--
18+
19+
## Freestyle Faith
20+
21+
<div style="position:relative; width:900px; height:600px; margin:0 auto;">
22+
<img src="images/freestyle-faith.png" style="position:absolute;top:0;left:0;" />
23+
<img src="images/freestyle-faith-2.png" style="position:absolute;top:0;left:350;" />
24+
</div>
25+
26+
Note:
27+
28+
- dann passiert plötzlich doch ein bisschen mehr
29+
- nach und nach müssen Tools zusammengeklebt werden
30+
- Anbindung ans SCM System
31+
- Reporting
32+
33+
--
34+
35+
## Holy Moly Groovy Pipelines
36+
37+
![](images/holy-moly-pipelines.png) <!-- .element width="80%" -->
38+
39+
--
40+
41+
![](images/pipeline-lotr.png) <!-- .element width="65%" -->
42+
43+
Note:
44+
Höher, schneller, weiter: Eine Pipeline, um sie alle zu knechten.
45+
46+
--
47+
48+
## Law of the Instrument
49+
50+
- Pipeline als Ersatzbuildsystem <!-- .element: class="fragment" -->
51+
- Buildlogik in Pipelines (10000e Zeilen Groovy DSL) <!-- .element: class="fragment" -->
52+
- Ausreichend? Nein! Shared Libraries und Plugins gibt es ja auch noch ... <!-- .element: class="fragment" -->
53+
- Nicht nachvollziehbare CI Ergebnisse <!-- .element: class="fragment" -->
54+
- Worst case: getrennte Repos für Source Code und Pipeline <!-- .element: class="fragment" -->
55+
56+
Note:
57+
58+
- CI-System macht andere/mehr Sachen als die Buildumgebung.
59+
- Mit dem Hammer in der Hand sieht die Welt wie ein Haufen von Nägeln aus.
60+
- Birmingham screwdriver
61+
62+
--
63+
64+
## Continuous Complexity
65+
66+
![](images/weight.png) <!-- .element width="60%" style="filter: invert(100%)" -->

0 commit comments

Comments
 (0)