Main sponsor




  Gerrit
Luca Milanesio
Who’s that guy ?




review.GerritForge™.com   Copyright © 2012 – LMIT Software
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
Agile and continuous integration

  • Who is using CI ? … raise your hand !!!!

  • Good or bad ?


  •Why ?



review.GerritForge™.com      Copyright © 2012 – LMIT Software
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
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
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
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
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
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
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
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
Gerrit: high level workflow
                 CI Build: OK


                                                              master
         A1




review.GerritForge™.com         Copyright © 2012 – LMIT Software
Gerrit: high level workflow
                 CI Build: OK


                                                              master
         A1




 clone



                                                                    local
      A1                                                           master



review.GerritForge™.com         Copyright © 2012 – LMIT Software
Gerrit: high level workflow
                 CI Build: OK


                                                              master
         A1




 clone



                                                                    local
      A1         C2                                                master



review.GerritForge™.com         Copyright © 2012 – LMIT Software
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
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
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
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
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
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
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
See Gerrit “live” in action




review.GerritForge™.com         Copyright © 2012 – LMIT Software
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
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
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
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
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
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
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
8. Verify change against CI




review.GerritForge™.com         Copyright © 2012 – LMIT Software
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
10. Change-Id is validated against CI




                          • Request code-review
review.GerritForge™.com         Copyright © 2012 – LMIT Software
11. Review and comment changes




review.GerritForge™.com   Copyright © 2012 – LMIT Software
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
13. Master build is triggered … SUCCESS !!




review.GerritForge™.com     Copyright © 2012 – LMIT Software
… 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
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
BACKUP




review.GerritForge™.com        Copyright © 2012 – LMIT Software
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
Define groups and members
 Admin > Groups




review.GerritForge™.com   Copyright © 2012 – LMIT Software
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
Define project access rights per refspec
 Admin > Projects > 33degree > Access




review.GerritForge™.com                 Copyright © 2012 – LMIT Software
Assign access rights to Groups




review.GerritForge™.com     Copyright © 2012 – LMIT Software
… and Gerrit replication
                                                         Remote
                                                        gerrit or git
                           Remote
                          gerrit or git

    Master
    gerrit




review.GerritForge™.com                   Copyright © 2012 – LMIT Software

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 continuousintegration • Who is using CI ? … raise your hand !!!! • Good or bad ? •Why ? review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 5.
    Continuous Integration isGOOD • 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 buildid 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 … canyou 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 Gerrittoday ? • 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 levelworkflow CI Build: OK master A1 review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 14.
    Gerrit: high levelworkflow CI Build: OK master A1 clone local A1 master review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 15.
    Gerrit: high levelworkflow CI Build: OK master A1 clone local A1 C2 master review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 16.
    Gerrit: high levelworkflow 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 levelworkflow 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 levelworkflow 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 levelworkflow 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 levelworkflow 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 levelworkflow 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 userand 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 toGerrit 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 aGerrit 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 repofrom 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 achange 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 changeagainst CI review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 32.
    9. Additional patch-setto 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 isvalidated against CI • Request code-review review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 34.
    11. Review andcomment changes review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 35.
    12. Review mergeand 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 buildis triggered … SUCCESS !! review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 37.
    … is justabout 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-reviewthen ? • 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 andmembers Admin > Groups review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 42.
    Putting all togetherwith 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 accessrights per refspec Admin > Projects > 33degree > Access review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 44.
    Assign access rightsto Groups review.GerritForge™.com Copyright © 2012 – LMIT Software
  • 45.
    … and Gerritreplication Remote gerrit or git Remote gerrit or git Master gerrit review.GerritForge™.com Copyright © 2012 – LMIT Software