SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Your own full blown
Gerrit plugin.
2014 Dariusz Łuksza
Dariusz Łuksza, CollabNet
dariusz@luksza.org
@dluksza
2014 Dariusz Łuksza
Preconditions
● Basic concept of Dependeny Injection (or have
open mind to grasp it during presentation)
● POSIX compatibe operating system (Linux or
Mac... or Windows with cygwin, sshd is
required)
● Being familiar with JavaScript
● Maven
2014 Dariusz Łuksza
How Gerrit and Jenkins Gerrit
Trigger plugin works?
Trigger buld
Push
Retrigger build
Post comments
Send email
developer
2014 Dariusz Łuksza
What we will build?1
2
3
Plus maven configuration to build and
deploy plugin in running Gerrit instance.
2014 Dariusz Łuksza
What it requires?
● REST endpoint – to schedule a build and
receive confirmation
● UI Action – part of Gerrit Web UI that will show
button on change screen and popups
● Capabilities – so that only members of given
groups can retrigger builds
● Two HTTP calls from Gerrit to CI server – this
is implementation detail, how we actually
retrigger build
Initialize project
2014 Dariusz Łuksza
2014 Dariusz Łuksza
Add archetype catalog
Window → Preferences → Maven → Archetypes
First of all you need to add remote archetype
catalog to Eclipse... don't know why
repo1.maven.org is not on the default list.
2014 Dariusz Łuksza
Create project from archetype
Ctrl + n → Maven → Maven Project → Next x2
Fill out those addional
archetype properties
2014 Dariusz Łuksza
Default project structure
You can also provide
documentation for plugin ;)
Automated plugin
deployment
2014 Dariusz Łuksza
2014 Dariusz Łuksza
How to intall plugin in gerrit?
● Copy jar file to $gerrit_home/plugins directory
– Works fine in local development environment but could
be not compatible with integration tests
or
● Use Gerrit ssh command to install it remotley
– Plugin jar file must be on server file system
– Use scp command to copy plugin jar file, then gerrit ssh
command to install it
– Requires additional setting in $gerrit_site/etc/gerrit.config:
[plugins]
allowRemoteAdmin = true
2014 Dariusz Łuksza
How to deploy plugin from
command line?
$ scp username@gerrit.host /path/to/plugin/file.jar /tmp/
$ ssh -p 4918 gerrit_username@gerrit.host gerrit plugin
install /tmp/jar.file
First operation require SSHD running on the server
and system account.
Second, require account in Gerrit (this is different
then one used in first step) and membership in Gerrit
Administrators group*.
* or Administrate Server capability
2014 Dariusz Łuksza
Deploy from Maven? Yes, we can!
Those lines goes on and on... On last
slide you will find link to repository
that contains this pom.xml file
2014 Dariusz Łuksza
And missing Maven profile setting
systemUser name is used
in scp command
deployUser should be
member of Gerrit
Administrators group*.
Plus have SSH public
key in Gerrit of local
system user.
* or have Administrate Server capability
2014 Dariusz Łuksza
And we are good to go!
Now you can simply type `mvn verify` to
deploy newest plugin version in running Gerrit
Our two commands
being executed
Configure your plugin
2014 Dariusz Łuksza
2014 Dariusz Łuksza
Configure plugin in gerrit.config
● Add:
[plugin "RetriggerMe"]
jenkinsUrl = http://localhost:9090/
selfName = localhost 8080
to $gerrit_site/etc/gerrit.config and restart Gerrit
● From now on, our plugin must be installed
under `RetriggerMe` name. Otherwise it will not
see this configuration.
2014 Dariusz Łuksza
Let's start from plugin configuration!
pluginName will contain name
under which our plugin was
installed in Gerrit, annotation
here is very important. That
value is dynamically bound in
plugin context during
installation process.
Extract `jenkinsUrl` and `selfName` from
$gerrit_site/etc/gerrit.config file
Don't forget about @Inject
Communicate with
outside world via REST
endpoints
2014 Dariusz Łuksza
2014 Dariusz Łuksza
Let's communicate with outside
world! - REST end points
Will be automatically
serialized to JSON
before sending to client.
Inject our configuration provider
Implement proper interface
2014 Dariusz Łuksza
Let's communicate with outside
world! - REST end points
Inform Gerrit that we want to have our REST
enpoint to be registered in `change` context,
with name `retrigger`. This is another part of
Gerrit's Guice magic ;)
2014 Dariusz Łuksza
Let's communicate with outside
world! - REST end points
Install our child Guice module in
main plugin module.
2014 Dariusz Łuksza
Let's communicate with outside
world! - REST end points
Let's test it:
$ mvn verify
$ curl -X POST –digest 
http://admin:tJESZhrTpZGm@localhost:8080/a/changes/2/RetriggerMe~retrigger
)]}'
{
"jenkins_url": "http://localhost:9090/"
}
Generated HTTP
password for admin user
Name under which
plugin was installed
REST endpoint name
Response
Context name
Response always starts with magic “)]}'” prefix. This is preventing
from JavaScript injection, this is a security feature of Gerrit.
Extend Web UI
2014 Dariusz Łuksza
2014 Dariusz Łuksza
Add button on Web UI
Add UiAction interface
2014 Dariusz Łuksza
Add button on Web UI
Handle button
`onclick` action
Gerrit's
JavaScript
magic ;)
Context
name
Our REST
endpoint
name
2014 Dariusz Łuksza
Communicate back to server
Callback function
Call associated
REST endpoint
Note object fields naming
convention (underscores)
2014 Dariusz Łuksza
Handle data from client and trigger
build
Input datastructure, remember
about name convention,
camelCase in Java,
underscores_in_java_script
Gerrit will automatically deserialize JSON to Java object
Extend Gerrit
permission system
2014 Dariusz Łuksza
2014 Dariusz Łuksza
Protect retrigger button with plugin
own capability
Extend
CapabilityDefinition
class
2014 Dariusz Łuksza
Protect retrigger button with plugin
own capability
Grant our plugin
capability to users group
Configuring capabilities requires changes in All-Projects access rights.
2014 Dariusz Łuksza
Protect retrigger button with plugin
own capability
Bind it in plugin
main module
2014 Dariusz Łuksza
Protect retrigger button with plugin
own capability
Anotate our UiAction with
@RequiresCapability
And that is it! Only members of groups with `retrigger` capability will
see `Retrigger Me!` button in Web UI.
Debugging?
2014 Dariusz Łuksza
2014 Dariusz Łuksza
How to debug?
● Modify $gerrit_site/etc/gerrit.config:
[container]
javaOptions = -Xdebug
-Xrunjdwp:transport=dt_socket,address=8998,server=y,suspend=n
● Use 'Remote debug' from Eclipse :)
2014 Dariusz Łuksza
Dariusz Łuksza, CollabNet
dariusz@luksza.org
@dluksza
Thank you!
Questions?
Links:
● Gerrit documentation:
https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/index.html
Plugins development part:
https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html
JavaScript API part:
https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/js-api.html
● RetriggerMe source:
https://github.com/dluksza/gerrit-retriggerme
● Presentation:
http://www.slideshare.net/dluksza/gerrit-plugins
● Create Gerrit Web UI plugins using AngularJS:
https://github.com/dluksza/angular-gerrit

Contenu connexe

Tendances

GitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code ReviewGitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code ReviewLuca Milanesio
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsLee Hanxue
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHubJames Gray
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to GitLukas Fittl
 
Git One Day Training Notes
Git One Day Training NotesGit One Day Training Notes
Git One Day Training Notesglen_a_smith
 
Introduction to Git and GitHub
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHubVikram SV
 
[Public] gerrit concepts and workflows
[Public] gerrit   concepts and workflows[Public] gerrit   concepts and workflows
[Public] gerrit concepts and workflowsYanbin Kong
 
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Simplilearn
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
Git & SourceTree
Git & SourceTreeGit & SourceTree
Git & SourceTreeTu Tran
 
What's New for GitLab CI/CD February 2020
What's New for GitLab CI/CD February 2020What's New for GitLab CI/CD February 2020
What's New for GitLab CI/CD February 2020Noa Harel
 

Tendances (20)

GitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code ReviewGitBlit plugin for Gerrit Code Review
GitBlit plugin for Gerrit Code Review
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
 
Gerrit tutorial
Gerrit tutorialGerrit tutorial
Gerrit tutorial
 
Git flow na prática
Git flow na práticaGit flow na prática
Git flow na prática
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and Github
 
Git
GitGit
Git
 
Git One Day Training Notes
Git One Day Training NotesGit One Day Training Notes
Git One Day Training Notes
 
Introduction to Git and GitHub
Introduction to Git and GitHubIntroduction to Git and GitHub
Introduction to Git and GitHub
 
[Public] gerrit concepts and workflows
[Public] gerrit   concepts and workflows[Public] gerrit   concepts and workflows
[Public] gerrit concepts and workflows
 
Git Mastery
Git MasteryGit Mastery
Git Mastery
 
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
Git tutorial
Git tutorialGit tutorial
Git tutorial
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
Git & SourceTree
Git & SourceTreeGit & SourceTree
Git & SourceTree
 
What's New for GitLab CI/CD February 2020
What's New for GitLab CI/CD February 2020What's New for GitLab CI/CD February 2020
What's New for GitLab CI/CD February 2020
 
git and github
git and githubgit and github
git and github
 
Git
GitGit
Git
 

Similaire à Your own full blown Gerrit plugin

Build Your Own HiveMQ Extension
Build Your Own HiveMQ ExtensionBuild Your Own HiveMQ Extension
Build Your Own HiveMQ ExtensionHiveMQ
 
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSHTame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSHDavid Stockton
 
Null bhopal Sep 2016: What it Takes to Secure a Web Application
Null bhopal Sep 2016: What it Takes to Secure a Web ApplicationNull bhopal Sep 2016: What it Takes to Secure a Web Application
Null bhopal Sep 2016: What it Takes to Secure a Web ApplicationAnant Shrivastava
 
DevOps: Cooking Drupal Deployment
DevOps: Cooking Drupal DeploymentDevOps: Cooking Drupal Deployment
DevOps: Cooking Drupal DeploymentGerald Villorente
 
Secure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and EtherpadSecure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and EtherpadGiuseppe Paterno'
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 DevelopmentDuke Dao
 
Drupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - DeployDrupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - DeployJohn Smith
 
Zend Framework Foundations
Zend Framework FoundationsZend Framework Foundations
Zend Framework FoundationsChuck Reeves
 
How to manage Microsoft Azure with open source
How to manage Microsoft Azure with open sourceHow to manage Microsoft Azure with open source
How to manage Microsoft Azure with open sourceTaehee Jang
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and MaintenanceJazkarta, Inc.
 
Control your deployments with Capistrano
Control your deployments with CapistranoControl your deployments with Capistrano
Control your deployments with CapistranoRamazan K
 
Development Setup of B-Translator
Development Setup of B-TranslatorDevelopment Setup of B-Translator
Development Setup of B-TranslatorDashamir Hoxha
 
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
 
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPDana Luther
 
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattlegarrett honeycutt
 

Similaire à Your own full blown Gerrit plugin (20)

Build Your Own HiveMQ Extension
Build Your Own HiveMQ ExtensionBuild Your Own HiveMQ Extension
Build Your Own HiveMQ Extension
 
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSHTame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
Tame Your Build And Deployment Process With Hudson, PHPUnit, and SSH
 
Docker
DockerDocker
Docker
 
Null bhopal Sep 2016: What it Takes to Secure a Web Application
Null bhopal Sep 2016: What it Takes to Secure a Web ApplicationNull bhopal Sep 2016: What it Takes to Secure a Web Application
Null bhopal Sep 2016: What it Takes to Secure a Web Application
 
DevOps: Cooking Drupal Deployment
DevOps: Cooking Drupal DeploymentDevOps: Cooking Drupal Deployment
DevOps: Cooking Drupal Deployment
 
Secure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and EtherpadSecure real-time collaboration with SecurePass and Etherpad
Secure real-time collaboration with SecurePass and Etherpad
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 Development
 
Drupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - DeployDrupal Continuous Integration with Jenkins - Deploy
Drupal Continuous Integration with Jenkins - Deploy
 
Zend Framework Foundations
Zend Framework FoundationsZend Framework Foundations
Zend Framework Foundations
 
How to manage Azure with open source
How to manage Azure with open sourceHow to manage Azure with open source
How to manage Azure with open source
 
How to manage Microsoft Azure with open source
How to manage Microsoft Azure with open sourceHow to manage Microsoft Azure with open source
How to manage Microsoft Azure with open source
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
Control your deployments with Capistrano
Control your deployments with CapistranoControl your deployments with Capistrano
Control your deployments with Capistrano
 
Hadoop Security Preview
Hadoop Security PreviewHadoop Security Preview
Hadoop Security Preview
 
Hadoop Security Preview
Hadoop Security PreviewHadoop Security Preview
Hadoop Security Preview
 
Hadoop Security Preview
Hadoop Security PreviewHadoop Security Preview
Hadoop Security Preview
 
Development Setup of B-Translator
Development Setup of B-TranslatorDevelopment Setup of B-Translator
Development Setup of B-Translator
 
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
 
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
 
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
 

Plus de Dariusz Łuksza

A story of 715 commits… in ~15 minutes

A story of 715 commits… in ~15 minutes
A story of 715 commits… in ~15 minutes

A story of 715 commits… in ~15 minutes
Dariusz Łuksza
 
Guiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landGuiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landDariusz Łuksza
 
Review your code like a Googler
Review your code like a GooglerReview your code like a Googler
Review your code like a GooglerDariusz Łuksza
 
Gerrit Code Review - The Introduction
Gerrit Code Review - The IntroductionGerrit Code Review - The Introduction
Gerrit Code Review - The IntroductionDariusz Łuksza
 
Gerrit JavaScript Plugins
Gerrit JavaScript PluginsGerrit JavaScript Plugins
Gerrit JavaScript PluginsDariusz Łuksza
 
Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)Dariusz Łuksza
 

Plus de Dariusz Łuksza (9)

A story of 715 commits… in ~15 minutes

A story of 715 commits… in ~15 minutes
A story of 715 commits… in ~15 minutes

A story of 715 commits… in ~15 minutes

 
One Man App
One Man AppOne Man App
One Man App
 
Guiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landGuiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise land
 
Review your code like a Googler
Review your code like a GooglerReview your code like a Googler
Review your code like a Googler
 
Git in Eclipse
Git in EclipseGit in Eclipse
Git in Eclipse
 
Put more eyes on code
Put more eyes on codePut more eyes on code
Put more eyes on code
 
Gerrit Code Review - The Introduction
Gerrit Code Review - The IntroductionGerrit Code Review - The Introduction
Gerrit Code Review - The Introduction
 
Gerrit JavaScript Plugins
Gerrit JavaScript PluginsGerrit JavaScript Plugins
Gerrit JavaScript Plugins
 
Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)
 

Dernier

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 

Your own full blown Gerrit plugin

  • 1. Your own full blown Gerrit plugin. 2014 Dariusz Łuksza Dariusz Łuksza, CollabNet dariusz@luksza.org @dluksza
  • 2. 2014 Dariusz Łuksza Preconditions ● Basic concept of Dependeny Injection (or have open mind to grasp it during presentation) ● POSIX compatibe operating system (Linux or Mac... or Windows with cygwin, sshd is required) ● Being familiar with JavaScript ● Maven
  • 3. 2014 Dariusz Łuksza How Gerrit and Jenkins Gerrit Trigger plugin works? Trigger buld Push Retrigger build Post comments Send email developer
  • 4. 2014 Dariusz Łuksza What we will build?1 2 3 Plus maven configuration to build and deploy plugin in running Gerrit instance.
  • 5. 2014 Dariusz Łuksza What it requires? ● REST endpoint – to schedule a build and receive confirmation ● UI Action – part of Gerrit Web UI that will show button on change screen and popups ● Capabilities – so that only members of given groups can retrigger builds ● Two HTTP calls from Gerrit to CI server – this is implementation detail, how we actually retrigger build
  • 7. 2014 Dariusz Łuksza Add archetype catalog Window → Preferences → Maven → Archetypes First of all you need to add remote archetype catalog to Eclipse... don't know why repo1.maven.org is not on the default list.
  • 8. 2014 Dariusz Łuksza Create project from archetype Ctrl + n → Maven → Maven Project → Next x2 Fill out those addional archetype properties
  • 9. 2014 Dariusz Łuksza Default project structure You can also provide documentation for plugin ;)
  • 11. 2014 Dariusz Łuksza How to intall plugin in gerrit? ● Copy jar file to $gerrit_home/plugins directory – Works fine in local development environment but could be not compatible with integration tests or ● Use Gerrit ssh command to install it remotley – Plugin jar file must be on server file system – Use scp command to copy plugin jar file, then gerrit ssh command to install it – Requires additional setting in $gerrit_site/etc/gerrit.config: [plugins] allowRemoteAdmin = true
  • 12. 2014 Dariusz Łuksza How to deploy plugin from command line? $ scp username@gerrit.host /path/to/plugin/file.jar /tmp/ $ ssh -p 4918 gerrit_username@gerrit.host gerrit plugin install /tmp/jar.file First operation require SSHD running on the server and system account. Second, require account in Gerrit (this is different then one used in first step) and membership in Gerrit Administrators group*. * or Administrate Server capability
  • 13. 2014 Dariusz Łuksza Deploy from Maven? Yes, we can! Those lines goes on and on... On last slide you will find link to repository that contains this pom.xml file
  • 14. 2014 Dariusz Łuksza And missing Maven profile setting systemUser name is used in scp command deployUser should be member of Gerrit Administrators group*. Plus have SSH public key in Gerrit of local system user. * or have Administrate Server capability
  • 15. 2014 Dariusz Łuksza And we are good to go! Now you can simply type `mvn verify` to deploy newest plugin version in running Gerrit Our two commands being executed
  • 16. Configure your plugin 2014 Dariusz Łuksza
  • 17. 2014 Dariusz Łuksza Configure plugin in gerrit.config ● Add: [plugin "RetriggerMe"] jenkinsUrl = http://localhost:9090/ selfName = localhost 8080 to $gerrit_site/etc/gerrit.config and restart Gerrit ● From now on, our plugin must be installed under `RetriggerMe` name. Otherwise it will not see this configuration.
  • 18. 2014 Dariusz Łuksza Let's start from plugin configuration! pluginName will contain name under which our plugin was installed in Gerrit, annotation here is very important. That value is dynamically bound in plugin context during installation process. Extract `jenkinsUrl` and `selfName` from $gerrit_site/etc/gerrit.config file Don't forget about @Inject
  • 19. Communicate with outside world via REST endpoints 2014 Dariusz Łuksza
  • 20. 2014 Dariusz Łuksza Let's communicate with outside world! - REST end points Will be automatically serialized to JSON before sending to client. Inject our configuration provider Implement proper interface
  • 21. 2014 Dariusz Łuksza Let's communicate with outside world! - REST end points Inform Gerrit that we want to have our REST enpoint to be registered in `change` context, with name `retrigger`. This is another part of Gerrit's Guice magic ;)
  • 22. 2014 Dariusz Łuksza Let's communicate with outside world! - REST end points Install our child Guice module in main plugin module.
  • 23. 2014 Dariusz Łuksza Let's communicate with outside world! - REST end points Let's test it: $ mvn verify $ curl -X POST –digest http://admin:tJESZhrTpZGm@localhost:8080/a/changes/2/RetriggerMe~retrigger )]}' { "jenkins_url": "http://localhost:9090/" } Generated HTTP password for admin user Name under which plugin was installed REST endpoint name Response Context name Response always starts with magic “)]}'” prefix. This is preventing from JavaScript injection, this is a security feature of Gerrit.
  • 24. Extend Web UI 2014 Dariusz Łuksza
  • 25. 2014 Dariusz Łuksza Add button on Web UI Add UiAction interface
  • 26. 2014 Dariusz Łuksza Add button on Web UI Handle button `onclick` action Gerrit's JavaScript magic ;) Context name Our REST endpoint name
  • 27. 2014 Dariusz Łuksza Communicate back to server Callback function Call associated REST endpoint Note object fields naming convention (underscores)
  • 28. 2014 Dariusz Łuksza Handle data from client and trigger build Input datastructure, remember about name convention, camelCase in Java, underscores_in_java_script Gerrit will automatically deserialize JSON to Java object
  • 30. 2014 Dariusz Łuksza Protect retrigger button with plugin own capability Extend CapabilityDefinition class
  • 31. 2014 Dariusz Łuksza Protect retrigger button with plugin own capability Grant our plugin capability to users group Configuring capabilities requires changes in All-Projects access rights.
  • 32. 2014 Dariusz Łuksza Protect retrigger button with plugin own capability Bind it in plugin main module
  • 33. 2014 Dariusz Łuksza Protect retrigger button with plugin own capability Anotate our UiAction with @RequiresCapability And that is it! Only members of groups with `retrigger` capability will see `Retrigger Me!` button in Web UI.
  • 35. 2014 Dariusz Łuksza How to debug? ● Modify $gerrit_site/etc/gerrit.config: [container] javaOptions = -Xdebug -Xrunjdwp:transport=dt_socket,address=8998,server=y,suspend=n ● Use 'Remote debug' from Eclipse :)
  • 36. 2014 Dariusz Łuksza Dariusz Łuksza, CollabNet dariusz@luksza.org @dluksza Thank you! Questions? Links: ● Gerrit documentation: https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/index.html Plugins development part: https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html JavaScript API part: https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/js-api.html ● RetriggerMe source: https://github.com/dluksza/gerrit-retriggerme ● Presentation: http://www.slideshare.net/dluksza/gerrit-plugins ● Create Gerrit Web UI plugins using AngularJS: https://github.com/dluksza/angular-gerrit