際際滷

際際滷Share a Scribd company logo
#DOH17#DOH17
dall'idea al deploy
un lungo viaggio che passa per
GitFlow e SemVer
Mauro Servienti
@mauroservienti
@mauroservienti
#DOH17
3
Organizer & sponsors
GetLatestVersion.it
@mauroservienti
4
DevOps 竪 prima di tutto una
forma mentis.
Gli strumenti sono una conseguenza
@mauroservienti
#DOH17
backlog
La gestione delle 束庄糸艶艶損
束In progress損
@mauroservienti
#DOH17
develop
feature/super-segreta
feature/meno-segreta
master
release/1.0.0
@mauroservienti
#DOH17
Assiomi
develop 竪 sempre rilasciabile come beta
master 竪 sempre rilasciabile in produzione
@mauroservienti
#DOH17
Supponiamo che
 Progetto vuoto: v0.0.0
 Feature A: v0.1.0
 Release: v0.1.0
 Feature B e Feature C in parallelo: v?
 Il lavoro in parallelo complica il tener traccia
 Della versione
 Di cosa si 竪 rilasciato
 Della retro-compatibilit
 Con patch e hotfix si complica ancora di pi湛
Introduzione a GitVersion
@mauroservienti
#DOH17
GitVersion
 Assegnare un numero di release 竪 un task da macchina
 non da umano senziente
 Cosa ci impedisce di guardare alla history e
 fare dei ragionamenti sullo stato attuale?
 generare un numero di versione sensato?
 develop -> unstable/beta
 master -> stable/release
 Disponibile come:
 Task di MSBuild
 Library
 Command line
Cosa fa GitVersion per noi
@mauroservienti
#DOH17
gestione della release
develop
feature/super-segreta
feature/meno-segreta
master
release/1.0.0
@mauroservienti
#DOH17
gestione delle nuove feature
 feature/xyz
 Anche nome branch che volete voli
 Pull Request
develop
feature/super-segreta
<intermezzo>
Piccola divagazione
@mauroservienti
#DOH17
Pull Request e Review
 Nulla di diverso dal branch-per-feature tradizionale
 Un sistema basato sui concetti di GitHub introduce
 Pull Request
 Review
 Il nostro flusso diventa quindi:
 Branch -> Lavoro -> Push -> PR -> Review -> Merge
@mauroservienti
#DOH17
PR -> review -> merge
You cannot merge your own PR
 Importantissime in un processo attento alla qualit
 Le review sono la base della condivisione del sapere
 Siccome ci piace automatizzare:
 Introduzione delle build automatiche sulle PR
 Simili ad un gated check-in (per certi versi)
</intermezzo>
Torniamo a noi
@mauroservienti
#DOH17
gestione delle hotfix/patch
develop
master
hotfix/1.1.1
bug
@mauroservienti
#DOH17
gestione delle hotfix/patch nel passato
develop
master
support/1.0
bug
hotfix/1.0.1
@mauroservienti
#DOH17
Perch辿 siamo cos狸
ossessionati dal
numero di versione?
@mauroservienti
#DOH17
Semantic Versioning
 vitale che una libreria
comunichi le tipologie di
cambiamento tra una
versione e laltra
@mauroservienti
#DOH17
SemVer: Major.Minor.Patch
 Il numero di versione ha una semantica ben precisa
 Major: la nuova versione contiene breaking changes
 Minor: nuove feature retro-compatibili
 Patch: bug fixing retro-compatibile
 Fondamentale per permettere a chi vi usa di capire cosa succeder
 Soprattutto se aggiorna senza ricompilare, come per le hotfix
@mauroservienti
#DOH17
senza ricompilarebreaking changes
 Voi usate un mio assembly che contiene:
void Foo() -> int Foo()
enum Bar{ Coffee, Tea } -> enum Bar{ Coffee, Cappuccino, Tea }
void FooBar() -> void FooBar( int arg: 10 )
@mauroservienti
#DOH17
ApprovalTests (salvaci tu)
 Rompe la build se:
 ci sono breaking changes
 non rispettiamo SemVer
 OSS: //github.com/approvals/ApprovalTests.Net
 Tanto semplice quanto scrivere un test:
@mauroservienti
#DOH17
//apicomparer.particular.net/compare/rabbitmq.client/3.4.3...3.5.7
@mauroservienti
#DOH17
Riassumendo
 Se non avete un processo basato su CI non avete un processo
 Continuous Integration 竪 la base della serenit
 GitFlow vi da la possibilit di gestire tutti gli scenari
 Automatizzate tutto lautomatizzabile
 Le persone sono fatte per pensare non per eseguire
 Semantic Versioning 竪 semplicemente buona educazione
 Spingetevi alla paranoia se ne avete bisogno
 ApprovalTests + ApiComparer
#DOH17#DOH17
Mauro Servienti
Solution Architect @ Particular Software
makers of NServiceBus
mauro.servienti@particular.neti
@mauroservienti
//github.com/mauroservienti
#DOH17#DOH17
Grazie!

More Related Content

Dall'idea al deploy un lungo viaggio che passa per git flow e semver