Les 4 - Git workflows
Voorbereiding
Reminder: De voorbereiding is niet optioneel. Zonder voorbereiding wordt het lastig om mee te doen met de les en dat is een verspilling van zowel je eigen tijd, tijd van je mede studenten en tijd van de docent. Niet aardig.
Neem de 2 artikelen en diagrammen door:
- Over GitHub flow
- Over git flow.
- Vragen over verschillen en eigen keuze:
- 3.1: Beschrijf eerst beide methoden in eigen woorden. Geef daarna een lijstje met verschillen tussen beiden.
- 3.2: Welk van deze methode ken jij al (een beetje)?
- 3.3: Voor welk van de twee zou je kiezen?
- 3.4: Welke van de twee methoden 1. Git flow of 2. GitHub flow zou jij kiezen in project A respectevelijk B:
- Project A: Een command line tool die door medewerker van een 'WebShop' gebruikt wordt om een JSON bestellijst van die dag om te zetten naar 2 aparte lijsten voor order picken door medewerkers in hun 2 magazijnen 'Vloerbedekking en Laminaat' en 'Gordijnen en vitrages'
- Project B: Een online video website met Agile ontwikkelmethode, waarin product owner onderkent dat deze de wensen van eindgebruikers niet geheel kent, en jullie experimenteren om nieuwe functionaliteit door eindgebruikers thuis te laten Beta testen?
Lesprogramma
- Doornemen lesvragen.
- Vraag: Waar heb jij 'branch by abstraction toegepast' in weekopdracht 1? (komen we verderop op terug)
- Samen doornemen van highlights uit video van David Farley over Continuous Integration vs Feature Branch Workflow dik kwartier (als genoeg tijd dan integraal samen kijken)
- Schrijf tijdens het kijken highlights op en minstens 2 vragen.
- Opdelen in duo's. Beantwoord elkaars vragen. Bespreek erna plenair (met docent) zaken waar je ook samen niet uitkwam.
- Kijken 'werkwijze bij weekopdrachten'
- Doornemen gemaakte weekopdrachten via enkele steekproefen, onderlinge feedback
- Bespreken vragen/knelpunten/onduidelijkheden
- Doornemen reflecties/self assessments
- Bespreken CO-304 uit het CDMM) - Deploy losgekoppeld van release
- Kijken naar OA-202 - Branch by abstraction en andere alternatieven voor Git branches (zie kopje hieronder)
- Toepassen Branch by abstraction op code om PrimeService/Priemtester werkend te krijgen voor alle getallen
- Als eerder klaar en opdracht 1 al veel af, doornemen en uitdelen opdracht week 2
- Vooruitblik volgende week en huiswerk les 2-1
Alternatieven voor git branches
Introductie term Branch by abstraction en andere alternatieven voor feature branching die beter bij Continuous Integration passen zoals feature toggles, of een dark release. Git heeft branching 'goedkoop' gemaakt t.o.v. andere versiebeheersystemen, maar branchen moet je zo kortdurend en minimaal mogelijk doen binnen DevOps. Geen 'long lived branches'.
Figuur 1: De branch uit branch by abstraction is GEEN 'Git branch', maar een conceptuele branch (bron: Fowler, 2014)
Er is ook zoiets als een 'Dark release' zoals Dave Farley het noemt (op 11:50 min in het filmpje). Martin Fowler defininieert deze term overigens net anders definieren en noemt wat Farley een 'Dark Launch' zelf meer een Keystone Interface (2020). Hij en anderen gebruiken 'Dark Release' als een synoniem voor een 'Canary Release' :S (split.io, z.d.). Een Canary release is een release die wel voo gebruikers beschikbaar is, maar voor slechts een deel daarvan, bijvoorbeeld Beta testers. Daar kijken we in week 4 verder naar, want bv. de Ingress uit KuberneteS maakt Canary releases makkelijker. Maar in dit vak hanteren we de terminologie van
Figuur 2: Keystone interface dankt zijn naam aan het concept 'keystone' een sluitsteen die een boog afmaakt.
Leerdoelen
- Je weet dat veelvuldig en - vooral - langdurig gebruik van meerdere Git branches NIET past bij een aanpak volgens Continuous Integration en waarom
- Je kunt drie alternatieven voor Git branches noemen en elke hiervan uitleggen
- Je weet waarom je (Git) branching toepast en op welke manier dit wel acceptabel is
- Je weet manieren 'to decouple release from deploy' (conform CDMM 'gevorderd' niveau)
- Je weet wat 'trunk based development' is (Gemmail, 2018)
Bronnen
Dit zijn in deze les aangehaalde gebruikte bronnen.
- GitHub flow* Geraadpleegd september 2024 op https://guides.github.com/introduction/flow/
- Farley, D. ()
- Hendriks, V. (5-1-2010) update on 5-3-2020 A successful Git branching model. Geraadpleegd september 2024 op https://nvie.com/posts/a-successful-git-branching-model/
- Fowler, M. (7-1-2014). Branch by abstraction. Geraadpleegd 7 december 2023 op https://martinfowler.com/bliki/BranchByAbstraction.html
- Fowler, M. (29 April 2020). Keystone Interface. Geraadpleegd 7 december 2023 op https://martinfowler.com/bliki/KeystoneInterface.html
- Gemmail, R. (Apr 22, 2018) Trunk Based Development as a Cornerstone for Continuous Delivery Geraadpleegd op 5 september 2024 op https://www.infoq.com/news/2018/04/trunk-based-development/
- split.io (z.d.) Dark Launch Geraadpleegd op 5 september 2024 op https://www.split.io/glossary/dark-launch/