gerrit code review

Post on 17-May-2015

17.167 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Overview of Gerrit Code Review with a specific focus on its Jenkins CI integration.See and learn how to improve your Agile application lifecycle management by making your builds more stable and your development more under control.Gerrit Code Review allows developers to share ideas and get collective ownership of the project design and code-style.

TRANSCRIPT

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

top related