More Related Content Similar to Gerrit Code Review (20) More from Luca Milanesio (20) Gerrit Code Review2. Who’s that guy ?
review.GerritForge™.com Copyright © 2012 – LMIT Software
3. Agenda
• Agile and the broken build dilemma
• Can Git solve it ?
• “Agile” workflow with Git
• Gerrit: the smart way
• Just about code-review ?
• Let’s play with Gerrit live !
review.GerritForge™.com Copyright © 2012 – LMIT Software
4. Agile and continuous integration
• Who is using CI ? … raise your hand !!!!
• Good or bad ?
•Why ?
review.GerritForge™.com Copyright © 2012 – LMIT Software
5. Continuous Integration is GOOD
• Live “weather forecast” of the project
• Detect and resolve conflicts earlier
• Bring TDD to life
• Enforce collective code ownership
• … and much more
review.GerritForge™.com Copyright © 2012 – LMIT Software
6. Breaking the build id BAD !
• All devs gets tests broken
• Build stops
• Test are NOT executed
… all team goes at “DEFCON1”
to fix it ASAP !!
review.GerritForge™.com Copyright © 2012 – LMIT Software
7. Broken build dilemma: how to avoid it ?
1. Do not PUSH until you’re 100% sure
of GREEN bar
2. Create multiple personal CI builds
and validate builds before PUSH
3. Install a “Jenkins Build Game” plug-
in and get free beers
… DO ANY OF THEM REALLY WORK ?
review.GerritForge™.com Copyright © 2012 – LMIT Software
8. Git … can you help out ?
Git short story: the anti-Subversion
• Apr 2005 – Linus writes PERL scripts for Linux Kernel SCM
• Jul 2005 … Git 0.99 is out !
Git principles:
• Continuous branching / merging / rebasing /
stashing
• Distributed repositories
• Distributed patch distribution
• Early integration
(before breaking the CI)
review.GerritForge™.com Copyright © 2012 – LMIT Software
9. Git topic-branches workflow
B4 B5 topic1
A1 A2 A3 master
C2 C3 C4 topic2
Agile workflow – one topic branch per story
• Keep on branch whilst RED / AMBER bar
• Continuous rebase on master
• Merge on GREEN bar
review.GerritForge™.com Copyright © 2012 – LMIT Software
10. Problem resolved ?
• Let’s use Git then ?
“My repo is the master”
“Git is all about peer-to-peer dev”
“Who has reverted my commits ? … !$@#!$!”
• Git doesn’t enforce any policy
Peer-to-peer development allowed
Dictatorship or anarchy of changes are both allowed
… is there a “better Git” out there ?
review.GerritForge™.com Copyright © 2012 – LMIT Software
11. Gerrit, brief history
Google
Mondrian
The idea: Guido Van Rossum
Code-review for Perforce
Porting to SVN and OpenSourced
Rietveld Python-based
2008 - Project fork for AOSP
(Shawn Pearce / Joe Onorato)
Gerrit
Rietveld Name changed to Gerrit Rietveld
Based on Git
Set of “patches” on original Guido’s
Rietveld project
gerrit 2009 - Gerrit 2, the Java + GWT rewriting
(Shawn Pearce)
review.GerritForge™.com Copyright © 2012 – LMIT Software
12. What is Gerrit today ?
• 100% pure Java SSH and HTTP Git backend
Powered by JGit
• GWT Web-view administration
Users and Groups
Project and branch security
Git repository browsing
• Git repository replication engine
• Code collaboration and review
• Code validation through Jenkins Triggers
review.GerritForge™.com Copyright © 2012 – LMIT Software
13. Gerrit: high level workflow
CI Build: OK
master
A1
review.GerritForge™.com Copyright © 2012 – LMIT Software
14. Gerrit: high level workflow
CI Build: OK
master
A1
clone
local
A1 master
review.GerritForge™.com Copyright © 2012 – LMIT Software
15. Gerrit: high level workflow
CI Build: OK
master
A1
clone
local
A1 C2 master
review.GerritForge™.com Copyright © 2012 – LMIT Software
16. Gerrit: high level workflow
CI Build: OK
master
A1
C2 refs/for/master
clone push
local
A1 C2 master
review.GerritForge™.com Copyright © 2012 – LMIT Software
17. Gerrit: high level workflow
CI Build: OK
master
A1
Verified: -1
(build failed)
C2 refs/for/master
clone push
local
A1 C2 master
review.GerritForge™.com Copyright © 2012 – LMIT Software
18. Gerrit: high level workflow
CI Build: OK
master
A1
Verified: -1
(build failed)
C2 C2* refs/for/master
clone push push
local
A1 C2 C2* master
review.GerritForge™.com Copyright © 2012 – LMIT Software
19. Gerrit: high level workflow
CI Build: OK
master
A1
Verified: -1 Verified: +1
(build failed) (build OK)
C2 C2* refs/for/master
clone push push
local
A1 C2 C2* master
review.GerritForge™.com Copyright © 2012 – LMIT Software
20. Gerrit: high level workflow
CI Build: OK
master
A1
Verified: -1 Verified: +1
(build failed) (build OK)
C2 C2* refs/for/master
Reviewed: +2
clone push push
local
A1 C2 C2* master
review.GerritForge™.com Copyright © 2012 – LMIT Software
21. Gerrit: high level workflow
CI Build: OK CI Build: OK
master
A1 C2*
Verified: -1 Verified: +1
(build failed) (build OK)
C2 C2* refs/for/master
Reviewed: +2
clone push push
local
A1 C2 C2* master
review.GerritForge™.com Copyright © 2012 – LMIT Software
22. Cool, isn’t it ?
• Gerrit allow “automatic” topic-branches
• Triggers with Jenkins branch validation
• Enforce collective code-ownership
People “interacts” with the code changes
Discussion on style and architecture
Democratic voting (+1 / -1)
• Project history
Reason behind changes is recorded in code-review
review.GerritForge™.com Copyright © 2012 – LMIT Software
23. See Gerrit “live” in action
review.GerritForge™.com Copyright © 2012 – LMIT Software
24. 1. Set-up
• Option-A: download and install
1. Download from
http://code.google.com/p/gerrit/downloads/list
2. Gerrit install wizard:
java –jar gerrit-2.2.2.1.war init -d ~/gerrit
3. Run Gerrit:
~/gerrit/bin/gerrit.sh start
• Option-B: Gerrit as hosted service
Assembla.com (free for OpenSorce projects)
GitEnterprise.com (free up to 10 users)
review.GerritForge™.com Copyright © 2012 – LMIT Software
25. 2. Create user and add SSH keys
• Option-A: not easy
Gerrit doesn’t support a “local user registry”
Options: LDAP or OpenID
• Option-B: use the provider user registration
Assembla:
https://www.assembla.com/signup
GitEnterprise:
https://gitent-scm.com/signup
review.GerritForge™.com Copyright © 2012 – LMIT Software
26. 3. Talk to Gerrit via SSH
• Gerrit SSH console
Listen at 29418 port
Not a real SSH server (just Gerrit listening)
review.GerritForge™.com Copyright © 2012 – LMIT Software
27. 4. Create a Gerrit project
• Gerrit Project is:
Git repository (use “path notation” to organise projects)
Access permissions
Code-review and change-sets
• Option-A: use Gerrit SSH command
$ ssh -p 29418 lmilanesio@localhost gerrit create-project
lmit/33degree
• Option-B: user the provider-specific page
Assembla: N/A (only 1 project associated to your “space”)
GitEnterprise:
https://gitent-scm.com/newrepo
review.GerritForge™.com Copyright © 2012 – LMIT Software
28. 5. Clone repo from Gerrit
• Git SSH repository URL is:
ssh://<user>@<host>:29418/<Gerrit project>.git
• Gerrit supports HTTP or HTTP/S repository URL:
http://<Gerrit URL>/p/<Gerrit project>.git
NOTE: For HTTP authentication, put your credentials on ~/.netrc file
machine <hostname> login <username> password <password>
review.GerritForge™.com Copyright © 2012 – LMIT Software
29. 6. Gerrit Change-Id
• SHA-1 GUID of a change-set under review
• MUST be last line of commit msg
Hint: install Gerrit post-commit hook for auto-
generating Change-Id after each Git commit
Now all Git commit will auto-generate a Change-Id !
review.GerritForge™.com Copyright © 2012 – LMIT Software
30. 7. Submit a change for review
• Change for review committed locally
• Push to refs/for/<branch> for submitting local Git
changes for review on <branch>
review.GerritForge™.com Copyright © 2012 – LMIT Software
31. 8. Verify change against CI
review.GerritForge™.com Copyright © 2012 – LMIT Software
32. 9. Additional patch-set to Change-Id
• Fix the problem locally
• Amend the commit (same Change-Id)
• Push again to refs/for/<branch> for adding one
extra change-set
review.GerritForge™.com Copyright © 2012 – LMIT Software
33. 10. Change-Id is validated against CI
• Request code-review
review.GerritForge™.com Copyright © 2012 – LMIT Software
34. 11. Review and comment changes
review.GerritForge™.com Copyright © 2012 – LMIT Software
35. 12. Review merge and submit change
• One or more
reviewers can “vote”
for the change
• Authorised users can
then “Submit” the
change.
• Change is
automatically merged
to master
review.GerritForge™.com Copyright © 2012 – LMIT Software
36. 13. Master build is triggered … SUCCESS !!
review.GerritForge™.com Copyright © 2012 – LMIT Software
37. … is just about code-review then ?
GitHub BitBucket Gitorious Gerrit
SSH / HTTPS
Free public repo
Free private repo
Repo security
Branch security
Code review
Hooks / API
Replication
CI Integration
OpenSource /
extensible
Issue-tracker
integration
review.GerritForge™.com Copyright © 2012 – LMIT Software
38. Credits and resources
• Many thanks to
Shawn Pearce, father of Gerrit
Its contributors and Google Inc.
• Google Gerrit code-review
http://code.google.com/p/gerrit/
• Assembla Gerrit
http://review.assembla.com
• GitEnterprise
http://review.gitent-scm.com
@gitenterprise
Slides available at http://www.slideshare.net/lucamilanesio
Follow me: @lucamilanesio
review.GerritForge™.com Copyright © 2012 – LMIT Software
40. Gerrit: just code-review then ?
• Git Security – Groups
Define different “roles” in the project
System groups
• Anonymous users: use for public projects
• Registered Users: all users
• Administrators: to administer Gerrit
• Project Owners: to administer projects
• Non-interactive Users: for CI or batch operations
Groups can be hierarchical (groups of groups)
review.GerritForge™.com Copyright © 2012 – LMIT Software
41. Define groups and members
Admin > Groups
review.GerritForge™.com Copyright © 2012 – LMIT Software
42. Putting all together with projects
• Git Security: rights to projects
Define access rights to Git operations
Control the Gerrit identity vs Git author /
committer
Delegate project administration
Assign code-review voting range rights
Define who can submit and merge changes
Organise project rights hirarchically
review.GerritForge™.com Copyright © 2012 – LMIT Software
43. Define project access rights per refspec
Admin > Projects > 33degree > Access
review.GerritForge™.com Copyright © 2012 – LMIT Software
45. … and Gerrit replication
Remote
gerrit or git
Remote
gerrit or git
Master
gerrit
review.GerritForge™.com Copyright © 2012 – LMIT Software