SlideShare a Scribd company logo
1 of 26
How to cook a Plugin

Luca Milanesio
GerritForge LLP

Luca@gerritforge.com
http://www.gerritforge.com
Base ingredients
       1. Gerrit code-review source
           Ver. 2.5 or later
       2. Maven 3.x and Internet
          connectivity
           Dependencies and Gerrit Plug-in API
       3. Focus for your plug-in ?
           HTTP/HTML ?
           SSH command ?
           Init step ?
           Gerrit GUI ?
           Gerrit internals ?

      Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                     gerrit
                                                                                                                                     User Summit 2012
Step-1: get Gerrit 2.5 source

$ git clone -b v2.5 https://gerrit-review.googlesource.com/gerrit
Cloning into 'gerrit'...
remote: Counting objects: 5622, done
remote: Finding sources: 100% (3294/3294)
remote: Getting sizes: 100% (2224/2224)
remote: Compressing objects: 100% (2224/2224)
remote: Total 73349 (delta 39481), reused 72619 (delta 39381)
Receiving objects: 100% (73349/73349), 14.30 MiB | 348 KiB/s, done.
Resolving deltas: 100% (39939/39939), done.
Note: checking out 'b465b6d753559781bcc44adf1077b09d820d09a5'.




                Needed for getting Gerrit plug-in APIs archetypes and
                sources (NOT yet on Maven public repos)




         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
Step-2: build Gerrit plug-in archetype
$ cd gerrit/gerrit-plugin-archetype && mvn install && cd ../..
[INFO] -----------------------------------------------------------------
[INFO] Building Gerrit Code Review - Plugin Archetype 2.5-SNAPSHOT
[INFO] -----------------------------------------------------------------
[...lots of Maven rubbish ...]
[INFO] Installing /Users/lucamilanesio/GerritUserSummit/gerrit/gerrit-
plugin-archetype/target/gerrit-plugin-archetype-2.5-SNAPSHOT.jar to
/Users/lucamilanesio/.m2/repository/com/google/gerrit/gerrit-plugin-
archetype/2.5-SNAPSHOT/gerrit-plugin-archetype-2.5-SNAPSHOT.jar
[INFO] Installing /Users/lucamilanesio/GerritUserSummit/gerrit/gerrit-
plugin-archetype/pom.xml to
/Users/lucamilanesio/.m2/repository/com/google/gerrit/gerrit-plugin-
archetype/2.5-SNAPSHOT/gerrit-plugin-archetype-2.5-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------




         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
Step-3: create your plug-in project
$ mvn archetype:generate -DarchetypeGroupId=com.google.gerrit 
    -DarchetypeArtifactId=gerrit-plugin-archetype 
    -DarchetypeVersion=2.5-SNAPSHOT 
    -DgerritApiVersion=2.5 
    -DgroupId=com.gerritforge -Dversion=1.0-SNAPSHOT 
    -DImplementation-Url=http://gerritforge.com 
    -DImplementation-Vendor=GerritForge 
    -DartifactId=plugin10mins -DpluginName=plugin10mins
[...]
Confirm properties configuration:
[...]
gerritApiType: plugin
gerritApiVersion: 2.5-SNAPSHOT
pluginName: plugin10mins
 Y: :
[INFO] -------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -------------------------------------------------------------


         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
Step-4: build and install plugin
$ cd plugin10mins && mvn package && cp target/plugin10mins*jar
$GERRIT_SITE/plugins/plugin10mins.jar
[INFO] ---------------------------------------------------------------
[INFO] Building plugin10mins 1.0-SNAPSHOT
[INFO] ---------------------------------------------------------------
[...lots of Maven rubbish ...]
[INFO] Building jar:
/Users/lucamilanesio/GerritUserSummit/plugin10mins/target/plugin10mins-
1.0-SNAPSHOT.jar
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ---------------------------------------------------------------




         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
Step-5: Ready to Go  … starter is served
Gerrit plugins hot-deploy
   No need to restart: plugins are automatically scanned and loaded
$ tail -1 $GERRIT_SITE/logs/error_log
[2012-11-09 12:05:33,838] INFO
com.google.gerrit.server.plugins.PluginLoader : Loaded plugin plugin10mins


http://<<GerritURL>>/#/admin/plugins/




         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
First course: let's add some initial code
First goal: adding HTTP/HTML features
    New Server-side feature: show Gerrit server date/time

Gerrit HTTP plug-ins have the ability to:
   Define new HTTP Servlets
   Map Servlets to plugin URLs paths automatically
   Define static resources mapped over HTTP
       (i.e. CSS, images, other)




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-1: Disable Guice modules in MF
Plug-in archetype has created Guice Modules
We will use auto-registration: comment out modules in pom.xml




       Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                      gerrit
                                                                                                                                      User Summit 2012
Step-2: Define the ServerTime servlet
                                              Automatically register this Servlet to
                                              <gerrit-url>/plugins/<plugin-name>/servertime


                                                                                                                      Plug-ins inherit
                                                                                                                      Gerrit class loader:
                                                                                                                      Servlet-API is
                                                                                                                      covered by PlugIn
                                                                                                                      API




      Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                     gerrit
                                                                                                                                     User Summit 2012
Step-3: add static resources
 We use bootstrap.css in our generated HTML page
 /static folder is automatically managed by Gerrit and mapped to
  <<gerrit-url>>/plugins/<plugin-name>/static


$ mkdir src/main/resources/static/

$ curl http://gitblit.com/bootstrap/css/bootstrap.css 
  -o src/main/resources/static/bootstrap.css
 % Total    % Received % Xferd Average Speed    Time    Time   Time
Current
                                 Dload Upload    Total   Spent  Left Speed
100 99896 100 99896     0     0 49384       0 0:00:02 0:00:02 --:--:--
98033




          Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                         gerrit
                                                                                                                                         User Summit 2012
Step-4: Rebuild and install
$ cd mvn package && cp target/plugin10mins*jar
$GERRIT_SITE/plugins/plugin10mins.jar
[...lots of Maven rubbish ...]
[INFO] Building jar:
/Users/lucamilanesio/GerritUserSummit/plugin10mins/target/plugin10mins-1.0-
SNAPSHOT.jar
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ---------------------------------------------------------------
Gerrit automatically scans for changes in $GERRIT_SITE/plugins: wait
for your plugin getting reloaded

$ tail -f -1 $GERRIT_SITE/logs/error_log
[2012-11-09 15:49:09,082] INFO
com.google.gerrit.server.plugins.PluginLoader : Reloading plugin
plugin10mins



         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
Step-5: First course is on the table 
http://<<GerritURL>>/plugins/plugin10mins/servertime




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Main course now: get injected by Gerrit
Let's make it useful: extend Gerrit functionality
   Get injected the same objects available in Gerrit (well, almost)
   Access Gerrit DB and JGit backend
   Display my commit from a repository

Our HTTP plug-in will have now the ability to:
   Current user identity
   Check if user has access that the repository
   Open the repository and get latest commit



        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-1: New Servlet "LastCommit"
Define a new Servlet mapped to /lastcommit path




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-2: Gerrit injected objects
We need access to accounts, project access and Git repositories
 let's get them injected in the constructor




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-3: Get project and check access
Get project name in 'p' Servlet URL parameter; Gerrit ProjectControl
provides access control info




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-4: Get my current identity
We get the current Gerrit user and display his accounts details
(user full name and preferred e-mail)




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-5: Get latest commit from repo
Using Gerrit's own repo manager, we get our last commit in the repo




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Main course is served 
http://<<GerritURL>>/plugins/plugin10mins/lastcommit?p=gerritsummit




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Does it really work with Gerrit security ?
Logging out from Gerrit and coming back to the plug-in page …




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
There's much more …
Gerrit plug-ins are much more than just Servlet 
   Provide your own SSH commands
   Listen to Gerrit events for audit-trail purposes
   Implement Gerrit group backends
  … and much more coming over in Gerrit 2.6 !!!!

Plugins are just "dynamic" Guice Modules
    Gerrit load and bind plug-ins modules
    No modules specified  self-discovery (the one we used)



        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Step-1: New SSH command
Create a new SshCommand exported as "servertime" command




                                                                                                         Automatically assigned to
                                                                                                         remote command:
                                                                                                         <plugin-name> servertime




       Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                      gerrit
                                                                                                                                      User Summit 2012
Step-2: Gerrit injected objects
Similarly to HTTP plug-in, we can inject Gerrit objects
 get current connected user identity




        Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                       gerrit
                                                                                                                                       User Summit 2012
Et voilà le dessert !
$ mvn package && cp target/plugin10mins*jar
$GERRIT_SITE/plugins/plugin10mins.jar
[...lots of Maven rubbish ...]
[INFO] Building jar:
/Users/lucamilanesio/GerritUserSummit/plugin10mins/target/plugin10mins-
1.0-SNAPSHOT.jar
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ---------------------------------------------------------------

… wait for hot-deploy … and your new plugin command is there !
$ ssh -p 29418 administrator@localhost plugin10mins servertime
Current date/time: Fri Nov 09 21:08:41 PST 2012
Current user: administrator <admin@mycompany.com>




         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012
Still hungry ?

Making a group system plugin (Colby Ranger, Google)
  Trombone room – Saturday Nov 10th - 11:30 AM

What’s coming in Gerrit 2.6 (Shawn Pearce, 2.6 Lead)
  Tambourine room – Sunday Nov 11th – 9:45 AM

JavaScript plugins (Dariusz Łuksza, CollabNet)
   Trombone room – Sunday Nov 11th – 1:30 PM

You can see these slides again at: www.slideshare.net/lucamilanesio



         Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
                                                                                                                                        gerrit
                                                                                                                                        User Summit 2012

More Related Content

What's hot

Gerrit Code Review: how to script a plugin with Scala and Groovy
Gerrit Code Review: how to script a plugin with Scala and GroovyGerrit Code Review: how to script a plugin with Scala and Groovy
Gerrit Code Review: how to script a plugin with Scala and GroovyLuca Milanesio
 
CICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsCICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsKumar Shìvam
 
CI with Gitlab & Docker
CI with Gitlab & DockerCI with Gitlab & Docker
CI with Gitlab & DockerJoerg Henning
 
Introduction to git and github
Introduction to git and githubIntroduction to git and github
Introduction to git and githubAderemi Dadepo
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudEberhard Wolff
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Noa Harel
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CIColCh
 
DevOps with GitHub Actions
DevOps with GitHub ActionsDevOps with GitHub Actions
DevOps with GitHub ActionsNilesh Gule
 
Credential store using HashiCorp Vault
Credential store using HashiCorp VaultCredential store using HashiCorp Vault
Credential store using HashiCorp VaultMayank Patel
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD processHYS Enterprise
 
Introduction to Vault
Introduction to VaultIntroduction to Vault
Introduction to VaultKnoldus Inc.
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIDavid Hahn
 

What's hot (20)

Gerrit Code Review: how to script a plugin with Scala and Groovy
Gerrit Code Review: how to script a plugin with Scala and GroovyGerrit Code Review: how to script a plugin with Scala and Groovy
Gerrit Code Review: how to script a plugin with Scala and Groovy
 
CICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsCICD Pipeline Using Github Actions
CICD Pipeline Using Github Actions
 
CI with Gitlab & Docker
CI with Gitlab & DockerCI with Gitlab & Docker
CI with Gitlab & Docker
 
Introduction to git and github
Introduction to git and githubIntroduction to git and github
Introduction to git and github
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
 
CI/CD with Github Actions
CI/CD with Github ActionsCI/CD with Github Actions
CI/CD with Github Actions
 
Knative Intro
Knative IntroKnative Intro
Knative Intro
 
Introducing GitLab (September 2018)
Introducing GitLab (September 2018)Introducing GitLab (September 2018)
Introducing GitLab (September 2018)
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CI
 
DevOps with GitHub Actions
DevOps with GitHub ActionsDevOps with GitHub Actions
DevOps with GitHub Actions
 
Credential store using HashiCorp Vault
Credential store using HashiCorp VaultCredential store using HashiCorp Vault
Credential store using HashiCorp Vault
 
GitLab for CI/CD process
GitLab for CI/CD processGitLab for CI/CD process
GitLab for CI/CD process
 
Introduction to Vault
Introduction to VaultIntroduction to Vault
Introduction to Vault
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CI
 
Google Guice
Google GuiceGoogle Guice
Google Guice
 
Git & GitLab
Git & GitLabGit & GitLab
Git & GitLab
 
CI/CD with GitHub Actions
CI/CD with GitHub ActionsCI/CD with GitHub Actions
CI/CD with GitHub Actions
 
Github
GithubGithub
Github
 
Git and Github Session
Git and Github SessionGit and Github Session
Git and Github Session
 
Gitlab ci-cd
Gitlab ci-cdGitlab ci-cd
Gitlab ci-cd
 

Viewers also liked

GitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code ReviewGitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code ReviewLuca Milanesio
 
GerritHub.io - present, past, future
GerritHub.io - present, past, futureGerritHub.io - present, past, future
GerritHub.io - present, past, futureLuca Milanesio
 
Gerrit Code Review Analytics
Gerrit Code Review AnalyticsGerrit Code Review Analytics
Gerrit Code Review AnalyticsLuca Milanesio
 
Git workshop 33degree 2011 krakow
Git workshop 33degree 2011 krakowGit workshop 33degree 2011 krakow
Git workshop 33degree 2011 krakowLuca Milanesio
 
Gerrit JavaScript Plugins
Gerrit JavaScript PluginsGerrit JavaScript Plugins
Gerrit JavaScript PluginsDariusz Łuksza
 
Code review process with JetBrains UpSource
Code review process with JetBrains UpSourceCode review process with JetBrains UpSource
Code review process with JetBrains UpSourceOleksii Prohonnyi
 

Viewers also liked (8)

GitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code ReviewGitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code Review
 
GerritHub.io - present, past, future
GerritHub.io - present, past, futureGerritHub.io - present, past, future
GerritHub.io - present, past, future
 
Gerrit Code Review Analytics
Gerrit Code Review AnalyticsGerrit Code Review Analytics
Gerrit Code Review Analytics
 
Factors de conversio
Factors de conversioFactors de conversio
Factors de conversio
 
Git workshop 33degree 2011 krakow
Git workshop 33degree 2011 krakowGit workshop 33degree 2011 krakow
Git workshop 33degree 2011 krakow
 
Gerrit JavaScript Plugins
Gerrit JavaScript PluginsGerrit JavaScript Plugins
Gerrit JavaScript Plugins
 
Code review process with JetBrains UpSource
Code review process with JetBrains UpSourceCode review process with JetBrains UpSource
Code review process with JetBrains UpSource
 
Gerrit Code Review
Gerrit Code ReviewGerrit Code Review
Gerrit Code Review
 

Similar to Gerrit: how to cook a plugin in only 10 mins

Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3Luca Milanesio
 
What's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondWhat's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondLuca Milanesio
 
Build Your Own HiveMQ Extension
Build Your Own HiveMQ ExtensionBuild Your Own HiveMQ Extension
Build Your Own HiveMQ ExtensionHiveMQ
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD PlatformBo-Yi Wu
 
Exploring the GitHub Service Universe
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service UniverseBjörn Kimminich
 
Gerrit is Getting Native with RPM, Deb and Docker
Gerrit is Getting Native with RPM, Deb and DockerGerrit is Getting Native with RPM, Deb and Docker
Gerrit is Getting Native with RPM, Deb and DockerLuca Milanesio
 
Guiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landGuiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landDariusz Łuksza
 
Raspberry pi and Google Cloud
Raspberry pi and Google CloudRaspberry pi and Google Cloud
Raspberry pi and Google CloudFaisal Mehmood
 
2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_final2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_finalMythri P K
 
GIT training - advanced for software projects
GIT training - advanced for software projectsGIT training - advanced for software projects
GIT training - advanced for software projectsThierry Gayet
 
Git - Boost Your DEV Team Speed and Productivity
Git - Boost Your DEV Team Speed and ProductivityGit - Boost Your DEV Team Speed and Productivity
Git - Boost Your DEV Team Speed and ProductivityKMS Technology
 
git-commands-cheat-sheet-infopediya-com.pdf
git-commands-cheat-sheet-infopediya-com.pdfgit-commands-cheat-sheet-infopediya-com.pdf
git-commands-cheat-sheet-infopediya-com.pdfmurad khan
 
Introduction to git and Github
Introduction to git and GithubIntroduction to git and Github
Introduction to git and GithubWycliff1
 
git github PPT_GDSCIIITK.pptx
git github PPT_GDSCIIITK.pptxgit github PPT_GDSCIIITK.pptx
git github PPT_GDSCIIITK.pptxAbelPhilipJoseph
 
Gerrit linuxtag2011
Gerrit linuxtag2011Gerrit linuxtag2011
Gerrit linuxtag2011thkoch
 
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23msohn
 

Similar to Gerrit: how to cook a plugin in only 10 mins (20)

Gerrit tutorial
Gerrit tutorialGerrit tutorial
Gerrit tutorial
 
Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3Gerrit Code Review v3.2 and v3.3
Gerrit Code Review v3.2 and v3.3
 
What's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyondWhat's new in Gerrit Code Review v3.1 and beyond
What's new in Gerrit Code Review v3.1 and beyond
 
Build Your Own HiveMQ Extension
Build Your Own HiveMQ ExtensionBuild Your Own HiveMQ Extension
Build Your Own HiveMQ Extension
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD Platform
 
Exploring the GitHub Service Universe
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service Universe
 
Github By Nyros Developer
Github By Nyros DeveloperGithub By Nyros Developer
Github By Nyros Developer
 
Gerrit is Getting Native with RPM, Deb and Docker
Gerrit is Getting Native with RPM, Deb and DockerGerrit is Getting Native with RPM, Deb and Docker
Gerrit is Getting Native with RPM, Deb and Docker
 
Plugin development
Plugin developmentPlugin development
Plugin development
 
Guiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landGuiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise land
 
Raspberry pi and Google Cloud
Raspberry pi and Google CloudRaspberry pi and Google Cloud
Raspberry pi and Google Cloud
 
2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_final2015-ghci-presentation-git_gerritJenkins_final
2015-ghci-presentation-git_gerritJenkins_final
 
GIT training - advanced for software projects
GIT training - advanced for software projectsGIT training - advanced for software projects
GIT training - advanced for software projects
 
Git - Boost Your DEV Team Speed and Productivity
Git - Boost Your DEV Team Speed and ProductivityGit - Boost Your DEV Team Speed and Productivity
Git - Boost Your DEV Team Speed and Productivity
 
GIT By Sivakrishna
GIT By SivakrishnaGIT By Sivakrishna
GIT By Sivakrishna
 
git-commands-cheat-sheet-infopediya-com.pdf
git-commands-cheat-sheet-infopediya-com.pdfgit-commands-cheat-sheet-infopediya-com.pdf
git-commands-cheat-sheet-infopediya-com.pdf
 
Introduction to git and Github
Introduction to git and GithubIntroduction to git and Github
Introduction to git and Github
 
git github PPT_GDSCIIITK.pptx
git github PPT_GDSCIIITK.pptxgit github PPT_GDSCIIITK.pptx
git github PPT_GDSCIIITK.pptx
 
Gerrit linuxtag2011
Gerrit linuxtag2011Gerrit linuxtag2011
Gerrit linuxtag2011
 
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
 

More from Luca Milanesio

Gerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source codeGerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source codeLuca Milanesio
 
Cloud-native Gerrit Code Review
Cloud-native Gerrit Code ReviewCloud-native Gerrit Code Review
Cloud-native Gerrit Code ReviewLuca Milanesio
 
Gerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-stepGerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-stepLuca Milanesio
 
ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3Luca Milanesio
 
Gerrit Code Review multi-site
Gerrit Code Review multi-siteGerrit Code Review multi-site
Gerrit Code Review multi-siteLuca Milanesio
 
Gerrit User Summit 2019 Keynote
Gerrit User Summit 2019 KeynoteGerrit User Summit 2019 Keynote
Gerrit User Summit 2019 KeynoteLuca Milanesio
 
Gerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHubGerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHubLuca Milanesio
 
GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15Luca Milanesio
 
Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote Luca Milanesio
 
Jenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelinesJenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelinesLuca Milanesio
 
Gerrit User Summit 2017 Keynote
Gerrit User Summit 2017 KeynoteGerrit User Summit 2017 Keynote
Gerrit User Summit 2017 KeynoteLuca Milanesio
 
How to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issuesHow to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issuesLuca Milanesio
 
Jenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle TimeJenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle TimeLuca Milanesio
 
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code ReviewJenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code ReviewLuca Milanesio
 
Stable master workflow with Gerrit Code Review
Stable master workflow with Gerrit Code ReviewStable master workflow with Gerrit Code Review
Stable master workflow with Gerrit Code ReviewLuca Milanesio
 
Zero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeZero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeLuca Milanesio
 
Speed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData AnalyticsSpeed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData AnalyticsLuca Milanesio
 
Devoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery Analytics
Devoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery AnalyticsDevoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery Analytics
Devoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery AnalyticsLuca Milanesio
 
Gerrit jenkins-big data-continuous-delivery
Gerrit jenkins-big data-continuous-deliveryGerrit jenkins-big data-continuous-delivery
Gerrit jenkins-big data-continuous-deliveryLuca Milanesio
 

More from Luca Milanesio (20)

Gerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source codeGerrit Analytics applied to Android source code
Gerrit Analytics applied to Android source code
 
Cloud-native Gerrit Code Review
Cloud-native Gerrit Code ReviewCloud-native Gerrit Code Review
Cloud-native Gerrit Code Review
 
Gerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-stepGerrit Code Review migrations step-by-step
Gerrit Code Review migrations step-by-step
 
ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3ChronicleMap non-blocking cache for Gerrit v3.3
ChronicleMap non-blocking cache for Gerrit v3.3
 
Gerrit Code Review multi-site
Gerrit Code Review multi-siteGerrit Code Review multi-site
Gerrit Code Review multi-site
 
Gerrit User Summit 2019 Keynote
Gerrit User Summit 2019 KeynoteGerrit User Summit 2019 Keynote
Gerrit User Summit 2019 Keynote
 
Gerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHubGerrit multi-master / multi-site at GerritHub
Gerrit multi-master / multi-site at GerritHub
 
GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15GerritHub a true Gerrit migration story to v2.15
GerritHub a true Gerrit migration story to v2.15
 
Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote Gerrit User Summit 2018 - Keynote
Gerrit User Summit 2018 - Keynote
 
Jenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelinesJenkins plugin for Gerrit Code Review pipelines
Jenkins plugin for Gerrit Code Review pipelines
 
Gerrit User Summit 2017 Keynote
Gerrit User Summit 2017 KeynoteGerrit User Summit 2017 Keynote
Gerrit User Summit 2017 Keynote
 
How to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issuesHow to keep Jenkins logs forever without performance issues
How to keep Jenkins logs forever without performance issues
 
Jenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle TimeJenkins Pipeline on your Local Box to Reduce Cycle Time
Jenkins Pipeline on your Local Box to Reduce Cycle Time
 
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code ReviewJenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
Jenkins world 2017 - Data-Driven CI Pipeline with Gerrit Code Review
 
Stable master workflow with Gerrit Code Review
Stable master workflow with Gerrit Code ReviewStable master workflow with Gerrit Code Review
Stable master workflow with Gerrit Code Review
 
Zero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeZero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review Upgrade
 
Speed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData AnalyticsSpeed up Continuous Delivery with BigData Analytics
Speed up Continuous Delivery with BigData Analytics
 
Devoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery Analytics
Devoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery AnalyticsDevoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery Analytics
Devoxx 2016 Using Jenkins, Gerrit and Spark for Continuous Delivery Analytics
 
Gerrit jenkins-big data-continuous-delivery
Gerrit jenkins-big data-continuous-deliveryGerrit jenkins-big data-continuous-delivery
Gerrit jenkins-big data-continuous-delivery
 
Is TDD dead or alive?
Is TDD dead or alive?Is TDD dead or alive?
Is TDD dead or alive?
 

Recently uploaded

HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...Nguyen Thanh Tu Collection
 
What is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPWhat is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPCeline George
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Celine George
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for BeginnersSabitha Banu
 
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxGrade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxChelloAnnAsuncion2
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
Roles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in PharmacovigilanceRoles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in PharmacovigilanceSamikshaHamane
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxiammrhaywood
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxAshokKarra1
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomnelietumpap1
 
Q4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptxQ4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptxnelietumpap1
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfTechSoup
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptxSherlyMaeNeri
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 

Recently uploaded (20)

HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
 
What is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPWhat is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERP
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
 
Raw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptxRaw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptx
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for Beginners
 
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptxGrade 9 Q4-MELC1-Active and Passive Voice.pptx
Grade 9 Q4-MELC1-Active and Passive Voice.pptx
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
Roles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in PharmacovigilanceRoles & Responsibilities in Pharmacovigilance
Roles & Responsibilities in Pharmacovigilance
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptx
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choom
 
Q4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptxQ4 English4 Week3 PPT Melcnmg-based.pptx
Q4 English4 Week3 PPT Melcnmg-based.pptx
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptx
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
OS-operating systems- ch04 (Threads) ...
OS-operating systems- ch04 (Threads) ...OS-operating systems- ch04 (Threads) ...
OS-operating systems- ch04 (Threads) ...
 

Gerrit: how to cook a plugin in only 10 mins

  • 1. How to cook a Plugin Luca Milanesio GerritForge LLP Luca@gerritforge.com http://www.gerritforge.com
  • 2. Base ingredients 1. Gerrit code-review source  Ver. 2.5 or later 2. Maven 3.x and Internet connectivity  Dependencies and Gerrit Plug-in API 3. Focus for your plug-in ?  HTTP/HTML ?  SSH command ?  Init step ?  Gerrit GUI ?  Gerrit internals ? Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 3. Step-1: get Gerrit 2.5 source $ git clone -b v2.5 https://gerrit-review.googlesource.com/gerrit Cloning into 'gerrit'... remote: Counting objects: 5622, done remote: Finding sources: 100% (3294/3294) remote: Getting sizes: 100% (2224/2224) remote: Compressing objects: 100% (2224/2224) remote: Total 73349 (delta 39481), reused 72619 (delta 39381) Receiving objects: 100% (73349/73349), 14.30 MiB | 348 KiB/s, done. Resolving deltas: 100% (39939/39939), done. Note: checking out 'b465b6d753559781bcc44adf1077b09d820d09a5'. Needed for getting Gerrit plug-in APIs archetypes and sources (NOT yet on Maven public repos) Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 4. Step-2: build Gerrit plug-in archetype $ cd gerrit/gerrit-plugin-archetype && mvn install && cd ../.. [INFO] ----------------------------------------------------------------- [INFO] Building Gerrit Code Review - Plugin Archetype 2.5-SNAPSHOT [INFO] ----------------------------------------------------------------- [...lots of Maven rubbish ...] [INFO] Installing /Users/lucamilanesio/GerritUserSummit/gerrit/gerrit- plugin-archetype/target/gerrit-plugin-archetype-2.5-SNAPSHOT.jar to /Users/lucamilanesio/.m2/repository/com/google/gerrit/gerrit-plugin- archetype/2.5-SNAPSHOT/gerrit-plugin-archetype-2.5-SNAPSHOT.jar [INFO] Installing /Users/lucamilanesio/GerritUserSummit/gerrit/gerrit- plugin-archetype/pom.xml to /Users/lucamilanesio/.m2/repository/com/google/gerrit/gerrit-plugin- archetype/2.5-SNAPSHOT/gerrit-plugin-archetype-2.5-SNAPSHOT.pom [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------ Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 5. Step-3: create your plug-in project $ mvn archetype:generate -DarchetypeGroupId=com.google.gerrit -DarchetypeArtifactId=gerrit-plugin-archetype -DarchetypeVersion=2.5-SNAPSHOT -DgerritApiVersion=2.5 -DgroupId=com.gerritforge -Dversion=1.0-SNAPSHOT -DImplementation-Url=http://gerritforge.com -DImplementation-Vendor=GerritForge -DartifactId=plugin10mins -DpluginName=plugin10mins [...] Confirm properties configuration: [...] gerritApiType: plugin gerritApiVersion: 2.5-SNAPSHOT pluginName: plugin10mins Y: : [INFO] ------------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------- Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 6. Step-4: build and install plugin $ cd plugin10mins && mvn package && cp target/plugin10mins*jar $GERRIT_SITE/plugins/plugin10mins.jar [INFO] --------------------------------------------------------------- [INFO] Building plugin10mins 1.0-SNAPSHOT [INFO] --------------------------------------------------------------- [...lots of Maven rubbish ...] [INFO] Building jar: /Users/lucamilanesio/GerritUserSummit/plugin10mins/target/plugin10mins- 1.0-SNAPSHOT.jar [INFO] --------------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] --------------------------------------------------------------- Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 7. Step-5: Ready to Go  … starter is served Gerrit plugins hot-deploy  No need to restart: plugins are automatically scanned and loaded $ tail -1 $GERRIT_SITE/logs/error_log [2012-11-09 12:05:33,838] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin plugin10mins http://<<GerritURL>>/#/admin/plugins/ Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 8. First course: let's add some initial code First goal: adding HTTP/HTML features  New Server-side feature: show Gerrit server date/time Gerrit HTTP plug-ins have the ability to:  Define new HTTP Servlets  Map Servlets to plugin URLs paths automatically  Define static resources mapped over HTTP (i.e. CSS, images, other) Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 9. Step-1: Disable Guice modules in MF Plug-in archetype has created Guice Modules We will use auto-registration: comment out modules in pom.xml Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 10. Step-2: Define the ServerTime servlet Automatically register this Servlet to <gerrit-url>/plugins/<plugin-name>/servertime Plug-ins inherit Gerrit class loader: Servlet-API is covered by PlugIn API Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 11. Step-3: add static resources We use bootstrap.css in our generated HTML page /static folder is automatically managed by Gerrit and mapped to <<gerrit-url>>/plugins/<plugin-name>/static $ mkdir src/main/resources/static/ $ curl http://gitblit.com/bootstrap/css/bootstrap.css -o src/main/resources/static/bootstrap.css % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 99896 100 99896 0 0 49384 0 0:00:02 0:00:02 --:--:-- 98033 Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 12. Step-4: Rebuild and install $ cd mvn package && cp target/plugin10mins*jar $GERRIT_SITE/plugins/plugin10mins.jar [...lots of Maven rubbish ...] [INFO] Building jar: /Users/lucamilanesio/GerritUserSummit/plugin10mins/target/plugin10mins-1.0- SNAPSHOT.jar [INFO] --------------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] --------------------------------------------------------------- Gerrit automatically scans for changes in $GERRIT_SITE/plugins: wait for your plugin getting reloaded $ tail -f -1 $GERRIT_SITE/logs/error_log [2012-11-09 15:49:09,082] INFO com.google.gerrit.server.plugins.PluginLoader : Reloading plugin plugin10mins Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 13. Step-5: First course is on the table  http://<<GerritURL>>/plugins/plugin10mins/servertime Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 14. Main course now: get injected by Gerrit Let's make it useful: extend Gerrit functionality  Get injected the same objects available in Gerrit (well, almost)  Access Gerrit DB and JGit backend  Display my commit from a repository Our HTTP plug-in will have now the ability to:  Current user identity  Check if user has access that the repository  Open the repository and get latest commit Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 15. Step-1: New Servlet "LastCommit" Define a new Servlet mapped to /lastcommit path Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 16. Step-2: Gerrit injected objects We need access to accounts, project access and Git repositories  let's get them injected in the constructor Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 17. Step-3: Get project and check access Get project name in 'p' Servlet URL parameter; Gerrit ProjectControl provides access control info Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 18. Step-4: Get my current identity We get the current Gerrit user and display his accounts details (user full name and preferred e-mail) Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 19. Step-5: Get latest commit from repo Using Gerrit's own repo manager, we get our last commit in the repo Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 20. Main course is served  http://<<GerritURL>>/plugins/plugin10mins/lastcommit?p=gerritsummit Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 21. Does it really work with Gerrit security ? Logging out from Gerrit and coming back to the plug-in page … Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 22. There's much more … Gerrit plug-ins are much more than just Servlet   Provide your own SSH commands  Listen to Gerrit events for audit-trail purposes  Implement Gerrit group backends … and much more coming over in Gerrit 2.6 !!!! Plugins are just "dynamic" Guice Modules  Gerrit load and bind plug-ins modules  No modules specified  self-discovery (the one we used) Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 23. Step-1: New SSH command Create a new SshCommand exported as "servertime" command Automatically assigned to remote command: <plugin-name> servertime Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 24. Step-2: Gerrit injected objects Similarly to HTTP plug-in, we can inject Gerrit objects  get current connected user identity Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 25. Et voilà le dessert ! $ mvn package && cp target/plugin10mins*jar $GERRIT_SITE/plugins/plugin10mins.jar [...lots of Maven rubbish ...] [INFO] Building jar: /Users/lucamilanesio/GerritUserSummit/plugin10mins/target/plugin10mins- 1.0-SNAPSHOT.jar [INFO] --------------------------------------------------------------- [INFO] BUILD SUCCESS [INFO] --------------------------------------------------------------- … wait for hot-deploy … and your new plugin command is there ! $ ssh -p 29418 administrator@localhost plugin10mins servertime Current date/time: Fri Nov 09 21:08:41 PST 2012 Current user: administrator <admin@mycompany.com> Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012
  • 26. Still hungry ? Making a group system plugin (Colby Ranger, Google) Trombone room – Saturday Nov 10th - 11:30 AM What’s coming in Gerrit 2.6 (Shawn Pearce, 2.6 Lead) Tambourine room – Sunday Nov 11th – 9:45 AM JavaScript plugins (Dariusz Łuksza, CollabNet) Trombone room – Sunday Nov 11th – 1:30 PM You can see these slides again at: www.slideshare.net/lucamilanesio Gerrit plugin in 10 mins by Luca Milanesio is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. gerrit User Summit 2012