branching & merging strategies (with tfs)

21
Branching & Merging strategies (with TFS) 28 Aprile 2016 Sponsored by Come accelerare i tuoi rilasci a costo zero

Upload: klab

Post on 14-Jan-2017

283 views

Category:

Technology


0 download

TRANSCRIPT

Branching & Merging strategies (with TFS) 28

Aprile 2016

Sponsored by

Come accelerare i tuoi rilasci a costo zero

Sponsor

Presentazione

• Igor Antonacci• DevOps Engineer & System Architect @ Fresenius Medical

Care• Co-Fondatore di DotDotNet e GetLatestVersion.it• Twitter: @bitbreaker• Facebook: fb.me/igorantonacci • Email: [email protected]

Agenda

• Introduzione• Nomenclatura• Perchè ...Strategies –

«Sto adottando la strategia giusta per il mio prodotto / Team / ciclo di sviluppo?»• Strategy #1 – Main Only• Strategy #2 – Release Isolation• Strategy #3 – Development Isolation• Strategy #4 – Development and Release Isolation• Strategy #5 – Servicing and Release Isolation• Strategy #6 – Servicing, Hotfix and Release Isolation• Strategy #7 – Feature Isolation• Strategy #8 – Code Promotion

• Branching and Merging Anti-Patterns• Conclusioni• Reference

Introduzione – 1

Context• Centralized Source Control – TFVC SOLO come esempio• Team con più di un membro (2 è sufficiente)• Prodotto/i (Software) da consegnare (artifacts)

Gli Attori

Team members Project

Da consegnare in tempo! Utenti FELICI!

Codebase

Team

Problematica da risolvere

• Processo di sviluppo consolidato• Design Sviluppo Test Deploy

• Uno o più Prodotti Software• Versioni differenti (prossima, in rilascio, in manutenzione)• Clienti diversi / diverse personalizzazioni

• Uno o più Team• «allocati» su Feature / Versioni differenti

• UNICA CODEBASE

NON ESISTE ALCUNO studio indipendente sulla correlazione tra Processo di Sviluppo e Metodologia di Branching

Perchè ...Strategies

• Approccio empirico al problema• Attaccare il «nemico» facendoci il meno male possibile

La strategia si applica a tutti i campi in cui per raggiungere l'obiettivo sono necessarie una

serie di operazioni separate, la cui scelta non è unica e/o il cui esito è incerto.

(cit. Wikipedia – Strategia)

Goal

• Gestire il lavoro concorrente di UNO o più Team sulla stessa codebase

• Isolare il rischio introdotto da diversi insiemi di modifiche alla codebase

• Fare delle istantanee della codebase al fine di gestire successivi cambiamenti isolati (es. Branch per Release, Personalizzazioni ecc.)

NomenclaturaTermine DescrizioneDevelopment Branch Branch che contiene i cambiamenti (alla codebase) per la prossima versione

Forward Integrate (FI) Merge da un ramo padre ad uno figlioReverse Integrate (RI) Merge da un ramo figlio ad uno padreHotfix Cambiamento necessario a riparare un bug «bloccante» o un problema che

impatta l’intero sistema.

Main Branch E’ il branch «che congiunge» il ramo di sviluppo con quello di rilascio.

Release Branch Branch dove confluirà il codice in preparazione per una specifica versione

Release Vehicle Il modo in cui il prodotto viene «rilasciato» al cliente (Hotfix, Major Release, Service Pack etc.)

Service Pack (SP) Un insieme di hotfix e funzionalità per una versione precedente del prodotto

Strategy #1 – Main Only

Strategy #2 – Release Isolation

Strategy #3 – Development Isolation

Strategy #4 – Development and Release Isolation

Strategy #5 – Servicing and Release Isolation

Strategy #6 – Servicing, Hotfix and Release Isolation

Strategy #7 – Feature Isolation

Strategy #8 – Code Promotion

Branching and Merging Anti-Patterns

• Merge Paranoia – evitare di fare Merge a tutti i costi• Merge Mania – Merge, Merge, Merge … come se piovesse • Big Bang Merge – Merge UNA VOLTA per «TUTTI» alla fine della fase di sviluppo• Never-ending Merge - Merge continuo… • Wrong-way merge – Fare il Merge di una feature sul ramo di una versione PRECEDENTE• Branch-mania – come Merge-mania, ma per il Branch• Cascading Branches – Branch che non confluiscono mai nel branch padre• Mysterious Branches – Branch … e perché? • Temporary Branches – Branch effettuato per un cambiamento … ma che poi diventa

un workspace permanente• Volatile Branches – Branch di uno o più Changeset anche se si trovano in uno stato

unstable• Development Freeze – SU LE MANIIIII• Berlin Wall – Branch per dividere i membri del Team… non il loro lavoro

Conclusioni

• L’adozione di una Branching Strategy è NECESSARIA all’interno di un Team• La scelta della corretta Strategy non è sempre facile e non

avviene sempre al «primo colpo»• Ogni Business / Dev Process ha delle caratteristiche uniche

Create la Vs. Strategy … cum grano salis (cit.)

Reference

• Visual Studio ALM Rangers – Branching Strategies(https://vsarbranchingguide.codeplex.com/) • Branching Taxonomy – MS Research

(http://research.microsoft.com/apps/pubs/?id=209683 )• Defining Your Branching and Merging Strategy

(https://msdn.microsoft.com/en-us/library/bb668955.aspx)• Branch Folders and Files

(https://msdn.microsoft.com/en-us/library/ms181425(VS.110).aspx )