CloudLand 2023, Juni 2023, Sascha Böhme, QAware
Ein System wird heutzutage üblicherweise in Microservices geschnitten, die jedes für sich genommen ein alleinstehendes Projekt bilden.
Wie schafft man es, dass sich ein Entwickler in einem Microservice sofort zuhause fühlt, ohne ihn vorher je gesehen zu haben? Wie schafft man es, dass alle Microservices die gleiche Grundstruktur behalten und warum sollte man das überhaupt wollen? Wie vermeidet man Divergenzen in Setup und Struktur, während unterschiedliche Teams an den Microservices arbeiten? Wie setzt man schnell einen neuen Microservice auf, der in seinem Aufbau den bestehenden ähnelt?Wir wollen zeigen, welche Vorteile Templates für die Entwicklung von Microservices haben und welche Methoden in diesem Kontext nützlich sind. Dies ergänzen wir mit weiteren Tools, um das Setup für alle Entwickler gleichermaßen zu erleichtern und zu beschleunigen.
13. 13
QAware
Beobachtete Probleme
Initialisieren von
Projekten
Aktualisieren von
Projekten
Woher nimmt man das initiale
Setup?
Einsteigen in neue
Projekte
Wie verteilt man
Änderungen am Setup?
Wie kommt man an alle
relevanten Projekte?
Wie passt man das initiale
Setup an neue Bedürfnisse
an?
Wie trennt man Setup-
Änderungen von anderen
Änderungen?
Was benötigt man für die
Entwicklung?
14. 14
QAware
Einblick in den Projektalltag
34 Mitarbeitende in
4 Teams
160 Repositories
31 Microservices 35 Jobs
51 Bibliotheken 43 weitere Repositories
Konventionen
Impulse für Neues
Vorgehensweisen
Problemlösungen
15. 15
QAware
Ein typisches Setup bei Projekten mit mehreren Teams
Getrennte Repositories Ähnlicher Aufbau
Kein Mono-Repo
Gleiche Entwicklungs-
umgebung
Gleiches Build-Tooling
Unterschiede in klar
umgrenzten Bereichen
Jedes Projekt in eigenem
Repository
Gleiche Versionsverwaltung
Ähnliches Deployment
16. 16
QAware
Faktoren für produktive Teams
Wiederverwendung
Expertenwissen
Entwickler-Fokus
Zusammenarbeit
Man muss das Rad nicht
immer neu erfinden.
Nicht jeder muss alle Details
kennen.
Gemeinsam sind wir stark.
Setup und Infrastruktur
müssen einfach gehen.
17. 17
QAware
Allgemeine Strategien für erhöhte Produktivität
geteilte Bibliotheken
Artefakte mit gemeinsam
genutztem Code
geteilte Workflows
Build-Plugins für
übergreifende Prozesse
Konventionen für alle Projekte
spezifisch für jede Projektart
parametrisiert für die
jeweiligen Unterschiede
18. 18
QAware
neues Repository anlegen
lokale Entwicklungsfähigkeit herstellen
Aspekte mit Automatisierungspotential
Änderungen am Projekt-Setup verteilen
Entwicklungsprozess vereinheitlichen
bei Projekteinstieg
basierend auf Wissen der
Vergangenheit
von einem Repository in alle
anderen ähnlichen
durch Konfigurationen
24. > git clone ssh://some.github.url/some-org/project-base
> cd project-base
> ./repo-man clone rocket
24
● klont alle Repositories vom Team “rocket”
● klont alle Repositories mit Tag “rocket”
28. > git clone ssh://some.github.url/some-org/project-base
> cd project-base
> ./repo-man clone rocket
> ls ..
rocket-lib-basket shared-lib-auth
rocket-srv-clothes shared-lib-error
rocket-srv-promotion shared-plg-secrets
> ./repo-man create rocket-srv-bags
28
● erzeugt das lokale Verzeichnis “rocket-srv-bags”
● initialisiert Git in diesem Verzeichnis
● füllt das Verzeichnis mit dem initialen Setup für
einen Service
● erzeugt das GitHub-Repository “rocket-srv-bags”
● pusht den initialen Stand nach GitHub
30. 30
project-base
▼ src
▼ repositories
■ plugins.yaml
■ libraries.yaml
■ services.yaml
► secrets
▼ templates
► base
► build
► library
► plugin
► sample-service
► service
■ README.md
■ repo-man
■ repo-man.bat
Setup aller Arten von Repositories
31. 31
project-base
▼ src
▼ repositories
■ plugins.yaml
■ libraries.yaml
■ services.yaml
► secrets
▼ templates
► base
► build
► library
► plugin
► sample-service
▼ service
► .github
► src
build.gradle
...
settings.gradle
■ README.md
■ repo-man
■ repo-man.bat
Setup für einen Service mit
Parametern zur Anpassung
wird sowohl für Updates als auch
für Initialisierungen verwendet
muss bei Änderungen in einem
Repository mitgepflegt werden
34. > ./repo-man update rocket-srv-clothes
34
wendet alle für dieses Repository konfigurierten
Templates der Reihe nach an
35. > ./repo-man update rocket-srv-clothes
> ./repo-man branch -n gradle-update services
> ./repo-man update -t base services
> ./repo-man commit -m “Updated Gradle to version 8.1.1” services
35
erzeugt den Branch “gradle-updates” vom
Standard-Branch
wendet das Template “base” auf alle
Service-Repositories an
erzeugt einen Commit der letzten Änderungen, pusht
den Commit zu GitHub und erstellt einen Pull-Request
37. > ./repo-man configure --setup libraries
> ./repo-man configure --secrets services
> ./repo-man configure --teams plugins
37
konfiguriert das GitHub-Setup aller
Library-Repositories
ersetzt die GitHub-Action-Secrets aller
Service-Repositories
aktualisiert alle Team-Berechtigungen in GitHub für
alle Plugin-Repositories
38. 38
QAware
Repo-M
an
Repo-Man in der Zusammenfassung
Repository-Setup as Code
automatisierte Verteilung von
Änderungen an Repositories
vervielfachte Ausführung von
gleichartigen Tätigkeiten