Code-switching in monologue and dialogue - Gerrit Jan Kootstra
Gerrit Code Review
-
Upload
luca-milanesio -
Category
Education
-
view
17.167 -
download
1
description
Transcript of Gerrit Code Review
Main sponsor
GerritLuca Milanesio
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Who’s that guy ?
Luca MilanesioLMIT Software / GerritForge LLP
• Jenkins contributor and founder
of JenkinsMobi.com
• Git enthusiast since 2009
and innovator in large
enterprises
• Gerrit contributor since
2011
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 !
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Agile and continuous integration
• Who is using CI ? … raise your hand !!!!
• Good or bad ?
• Why ?
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 !!
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 ?
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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)
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Git topic-branches workflow
A1 A2
topic1
topic2
masterA3
B4 B5
C2 C3 C4
Agile workflow – one topic branch per story• Keep on branch whilst RED / AMBER bar• Continuous rebase on master• Merge on GREEN bar
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 policyPeer-to-peer development allowedDictatorship or anarchy of changes are both
allowed
… is there a “better Git” out there ?
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit, brief history
The idea: Guido Van Rossum Code-review for Perforce Porting to SVN and OpenSourced Python-based
2008 - Project fork for AOSP(Shawn Pearce / Joe Onorato)
Name changed to Gerrit Rietveld Based on Git Set of “patches” on original Guido’s
Rietveld project
2009 - Gerrit 2, the Java + GWT rewriting
(Shawn Pearce)
Google Mondrian
Rietveld
Gerrit Rietveld
gerrit
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
What is Gerrit today ?
• 100% pure Java SSH and HTTP Git backendPowered by JGit
• GWT Web-view administrationUsers and GroupsProject and branch securityGit repository browsing
• Git repository replication engine• Code collaboration and review• Code validation through Jenkins Triggers
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1 master
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1 master
A1
clone
localmaster
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1 master
A1
clone
C2local
master
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1
refs/for/master
master
C2
A1
clone
C2local
master
push
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1
refs/for/master
master
C2
A1
clone
C2local
master
push
Verified: -1(build failed)
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1
refs/for/master
master
C2 C2*
A1
clone
C2local
masterC2*
push
Verified: -1(build failed)
push
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1
refs/for/master
master
C2 C2*
A1
clone
C2local
masterC2*
push
Verified: -1(build failed)
push
Verified: +1(build OK)
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1
refs/for/master
master
C2 C2*
A1
clone
C2local
masterC2*
push
Verified: -1(build failed)
push
Verified: +1(build OK)
Reviewed: +2
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: high level workflow
A1
refs/for/master
master
C2 C2*
A1
clone
C2local
masterC2*
push
Verified: -1(build failed)
push
Verified: +1(build OK)
Reviewed: +2
CI Build: OK
C2*
CI Build: OK
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Cool, isn’t it ?
• Gerrit allow “automatic” topic-branches• Triggers with Jenkins branch validation• Enforce collective code-ownership
People “interacts” with the code changesDiscussion on style and architectureDemocratic voting (+1 / -1)
• Project historyReason behind changes is recorded in code-
review
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
See Gerrit “live” in action
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
1. Set-up
• Option-A: download and install1. Download from
http://code.google.com/p/gerrit/downloads/list2. 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 serviceAssembla.com (free for OpenSorce projects)GitEnterprise.com (free up to 10 users)
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 registrationAssembla:
https://www.assembla.com/signupGitEnterprise:
https://gitent-scm.com/signup
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
3. Talk to Gerrit via SSH
• Gerrit SSH console Listen at 29418 port Not a real SSH server (just Gerrit listening)
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 filemachine <hostname> login <username> password <password>
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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 !
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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>
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
8. Verify change against CI
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
10. Change-Id is validated against CI
• Request code-review
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
11. Review and comment changes
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
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
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
13. Master build is triggered … SUCCESS !!
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
… is just about code-review then ?
GitHub BitBucket Gitorious GerritSSH / HTTPS
Free public repo
Free private repo
Repo security
Branch security
Code review
Hooks / API
Replication
CI Integration
OpenSource / extensible
Issue-tracker integration
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Credits and resources
• Many thanks toShawn Pearce, father of GerritIts contributors and Google Inc.
• Google Gerrit code-reviewhttp://code.google.com/p/gerrit/
• Assembla Gerrithttp://review.assembla.com
• GitEnterprisehttp://review.gitent-scm.com@gitenterprise
Slides available at http://www.slideshare.net/lucamilanesioFollow me: @lucamilanesio
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
BACKUP
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Gerrit: just code-review then ?
• Git Security – GroupsDefine different “roles” in the projectSystem 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
operationsGroups can be hierarchical (groups of
groups)
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Define groups and members
Admin > Groups
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Putting all together with projects
• Git Security: rights to projectsDefine access rights to Git operationsControl the Gerrit identity vs Git author /
committerDelegate project administrationAssign code-review voting range rightsDefine who can submit and merge
changesOrganise project rights hirarchically
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Define project access rights per refspec
Admin > Projects > 33degree > Access
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
Assign access rights to Groups
Copyright © 2012 – LMIT Softwarereview.GerritForge™.com
… and Gerrit replication
Master gerrit
Remotegerrit or git
Remotegerrit or git
Git
pro
toco
l
Git
pro
toco
l