KEMBAR78
Gerrit Code Review with GitHub plugin | PPTX
Luca@gerritforge.com
http://www.gerritforge.com
Twitter: @gitenterprise
GitHub plugin for …
Luca Milanesio
GerritForge
gerritGerrit Code Review
Platinum Sponsor
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 .io
About GerritForge
Founded in 2009 in London UK
Mission: Agile Enterprise
Products:
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 .io
Two divided review worlds
BRANCH
+
PULL
REQUEST
CHECKOUT
+
AMEND
6 .io
Fork + Pull request
GitHub BitBucket GitLab Gitorious + others …
> 10M repositories > 4M users
SourceRepo
mastera1c 2df f9a
fork
masterdec 6fa 7a1
7 .io
Change review (rebase example)
Gerrit GitBlit
+ others?
SourceRepo
mastera1c 2df 7a1
dec 6fa 7a1 changes/27/1627/*
amend amend
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 .io
WHAT PEOPLE
SAY ?
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 .io
MY OWN
(OpenSource +
Enterprise)
[humble]
EXPERIENCE …
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 .io
Governance
DEFINE rules for your project
TRUST your identities and roles
14 .io
Social engagement
MAKE your project visible
MAKE collaboration easy and fun
15 .io
Growth
PLAN for collaboration model to scale
AVOID explosion of forks and pending pull-requests
16 .io
Can we take both worlds ?
+ = ?
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 .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 .io
THIS IS COOL !
How can use it ?
20 .io
SPEEDY WAY
http://GerritHub.io/login
21 .io
DEMO TIME
[http://www.youtube.com/watch?v=jeWTvDad6VM]
22 .io
HACKY WAY
Build the plugin from source
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 .io
Step#2 – Get OAuth Client-Id / CLient-Secret
GitHub OAuth 2.0 credentials for Gerrit
integration
25 .io
Step#3 – Download Gerrit 2.10 (master)
http://ci.gerritforge.com/job/Gerrit-master
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 .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 .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 .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 .io
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

Gerrit Code Review with GitHub plugin

  • 1.
    Luca@gerritforge.com http://www.gerritforge.com Twitter: @gitenterprise GitHub pluginfor … Luca Milanesio GerritForge gerritGerrit Code Review Platinum Sponsor
  • 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 .io About GerritForge Foundedin 2009 in London UK Mission: Agile Enterprise Products:
  • 4.
    4 .io Agenda  Fork+Pullrequest 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 .io Two dividedreview worlds BRANCH + PULL REQUEST CHECKOUT + AMEND
  • 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 .io Change review(rebase example) Gerrit GitBlit + others? SourceRepo mastera1c 2df 7a1 dec 6fa 7a1 changes/27/1627/* amend amend
  • 8.
    8 .io Two worldsat 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.
  • 10.
    10 .io There aretwo 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 .io MY OWN (OpenSource+ Enterprise) [humble] EXPERIENCE …
  • 12.
    12 .io Review model DONOT 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 .io Governance DEFINE rulesfor your project TRUST your identities and roles
  • 14.
    14 .io Social engagement MAKEyour project visible MAKE collaboration easy and fun
  • 15.
    15 .io Growth PLAN forcollaboration model to scale AVOID explosion of forks and pending pull-requests
  • 16.
    16 .io Can wetake both worlds ? + = ?
  • 17.
    17 .io GitHub pluginfor 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 .io Gerrit andGitHub? 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 .io THIS ISCOOL ! How can use it ?
  • 20.
  • 21.
  • 22.
    22 .io HACKY WAY Buildthe plugin from source
  • 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 .io Step#2 –Get OAuth Client-Id / CLient-Secret GitHub OAuth 2.0 credentials for Gerrit integration
  • 25.
    25 .io Step#3 –Download Gerrit 2.10 (master) http://ci.gerritforge.com/job/Gerrit-master
  • 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 .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 .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 .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.
  • 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