Advertisement
Advertisement

More Related Content

Advertisement
Advertisement

Gerrit Code Review

  1. Main sponsor Gerrit Luca Milanesio
  2. 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
  39. BACKUP 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
  44. Assign access rights to Groups 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
Advertisement