Gerrit Code Review with GitHub plugin

10,304 views

Published on

GitHub pull request model and Gerrit Code Review, which one is best for you ?
What are the plus and minuses of both models ?

See how it make sense to use one or the other or even both together.

The GitHub plugin for Gerrit Code Review allows the existing developers community to start exploring code review without loosing contact with the github.com presence.

Published in: Education, Technology

Gerrit Code Review with GitHub plugin

  1. 1. Luca@gerritforge.com http://www.gerritforge.com Twitter: @gitenterprise GitHub plugin for … Luca Milanesio GerritForge gerritGerrit Code Review Platinum Sponsor
  2. 2. 2 .io About Luca • Luca Milanesio Co-founder of GerritForge • over 20 years of experience in Agile Development SCM and ALM worldwide • Contributor to Jenkins since 2007 (and previously Hudson) • Git SCM mentor for the Enterprise since 2009 • Contributor to Gerrit Code Review community since 2011
  3. 3. 3 .io About GerritForge Founded in 2009 in London UK Mission: Agile Enterprise Products:
  4. 4. 4 .io Agenda  Fork+Pull request or Change review ?  People says …  My experience say …  Plugging two worlds together  echo "github" | sed -e "s/git/gerrit/"  Pull requests and Repo replication  What do YOU think ?
  5. 5. 5 .io Two divided review worlds BRANCH + PULL REQUEST CHECKOUT + AMEND
  6. 6. 6 .io Fork + Pull request GitHub BitBucket GitLab Gitorious + others … > 10M repositories > 4M users SourceRepo mastera1c 2df f9a fork masterdec 6fa 7a1
  7. 7. 7 .io Change review (rebase example) Gerrit GitBlit + others? SourceRepo mastera1c 2df 7a1 dec 6fa 7a1 changes/27/1627/* amend amend
  8. 8. 8 .io Two worlds at a glance 1. BRANCH 2. SCORE THE BRANCH 3. MERGE ALL COMMITs in BRANCH 1. CHECKOUT 2. SCORE THE COMMIT 3. MERGE ONLY the REVIEWED COMMIT
  9. 9. 9 .io WHAT PEOPLE SAY ?
  10. 10. 10 .io There are two fundamental problems with single- patch review systems: 1. They encourage lumping at-best-weakly-related changes together. 2. They encourage you to hide your history. [http://bit.ly/1hhQkcA] The pull-request system looks like an incredible easy way to contribute to any project hosted on Github [but] doing any proper and useful contribution to a software is never done right the first time. But as a software maintainer you'll end up with pull-request you'll never get finished unless you wrap things up yourself. [http://bit.ly/1o7HIb6] A big advantage in Github's favor is the number of developers that are familiar with it compared to Gerrit. Gerrit can be popular with Git power-users, but friction-free use of it requires intermediate or advanced git knowledge, and tolerance of a steep learning curve. [http://bit.ly/1cJV8IJ] I have no problem with people using github as a hosting site, but in order for *me* to pull from github, you need to (a) make a real pull request […]: real explanation, proper email addresses, proper shortlog, and proper diffstat. (b) since github identities are random, I expect the pull request to be a signed tag [http://bit.ly/1iONQ4L]
  11. 11. 11 .io MY OWN (OpenSource + Enterprise) [humble] EXPERIENCE …
  12. 12. 12 .io Review model DO NOT make git bisect + git cherry-pick useless DO NOT throw commits over the fence (e.g. “I’ve made the pull request, now it’s up to you”)
  13. 13. 13 .io Governance DEFINE rules for your project TRUST your identities and roles
  14. 14. 14 .io Social engagement MAKE your project visible MAKE collaboration easy and fun
  15. 15. 15 .io Growth PLAN for collaboration model to scale AVOID explosion of forks and pending pull-requests
  16. 16. 16 .io Can we take both worlds ? + = ?
  17. 17. 17 .io GitHub plugin for Gerrit Code Review https://gerrit-review.googlesource.com/#/admin/projects/plugins/github 1. Imports Pull Requests  Gerrit Changes / Topics 2. Reuses GitHub identity using Gerrit auth rules 3. Replication: keeps presence on http://github.com 4. Prevents explosion of unmanaged forks 5. Avoid GitHub spamming  one-email-per-change
  18. 18. 18 .io Gerrit and GitHub? Who is ever gonna use it? June 2014 Statistics select count(*) from accounts = 1664 users select count(*) from changes = 3654 changes select count(*) from patch_sets = 4720 patch-sets find . -name '*.git' | wc –l = 5022 repositories du -s -h git = 140 GBytes
  19. 19. 19 .io THIS IS COOL ! How can use it ?
  20. 20. 20 .io SPEEDY WAY http://GerritHub.io/login
  21. 21. 21 .io DEMO TIME [http://www.youtube.com/watch?v=jeWTvDad6VM]
  22. 22. 22 .io HACKY WAY Build the plugin from source
  23. 23. 23 .io Step#1 - GitHub OAuth 2.0 application keys https://github.com/settings/applications/new Your server URL (hostname / port Gerrit will listen to) OAuth 2.0 callback URL is Your server URL + /oauth
  24. 24. 24 .io Step#2 – Get OAuth Client-Id / CLient-Secret GitHub OAuth 2.0 credentials for Gerrit integration
  25. 25. 25 .io Step#3 – Download Gerrit 2.10 (master) http://ci.gerritforge.com/job/Gerrit-master
  26. 26. 26 .io Step#4 – build GitHub plugin  git clone https://gerrit.googlesource.com/plugins/github && cd github  mvn install […] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7.755s [INFO] Finished at: Sat Mar 15 19:16:23 GMT 2014 [INFO] Final Memory: 57M/449M [INFO] ------------------------------------------------------------------------
  27. 27. 27 .io Step#5 – install OAuth filter and GitHub plugin > export GERRIT_SITE=/var/gerrit > mkdir –p $GERRIT_SITE/lib > cp github-oauth/target/github-oauth*.jar $GERRIT_SITE/lib > mkdir –p $GERRIT_SITE/plugins > cp github-plugin/target/github-plugin*.jar $GERRIT_SITE/plugins
  28. 28. 28 .io Step#6 – Gerrit setup + replication + singleusergroup > cd $GERRIT_SITE && java –jar release.war init –d $GERRIT_SITE *** Gerrit Code Review 2.9-rc1-779-g90fac34-dirty *** […] *** User Authentication *** Authentication method ? HTTP Get username from custom HTTP header ? Y Username HTTP header ? GITHUB_USER *** Plugins *** Install plugin singleusergroup version v2.9-rc2-536-g79393b2 [y/N]? y Install plugin replication version v2.9-rc2-536-g79393b2 [y/N]? y
  29. 29. 29 .io Step#7 – Configure GitHub integration […] *** GitHub Integration *** GitHub URL ? https://github.com Use GitHub for Gerrit login ? Y ClientId ? 732819a7b9c9d9a98 ClientSecret ? 6271627a6a7s6s718173642718a9bcacd HTTP Authentication Header [GITHUB_USER]:
  30. 30. 30 .io
  31. 31. Replay presentation: http://slideshare.net/lucamilanesio Sign-in: http://gerrithub.io/login Gerrit book: http://gerrithub.io/book Learn more about 20% OFF Book discount for 33 Degree.org User Conference Book CODE: dg7jnZ eBook CODE: Wi86Zh

×