JOB SCALABILITY IN JENKINS
GETTING OUT OF THE JOB JUNGLE
BruJUG - March 9th, 2016 - @DamienCoraboeuf
WHO AM I?
▸ Damien Coraboeuf (@DamienCoraboeuf)
▸ Born to Java in 1996
▸ “Brol” engineer since 2008
▸ Automating pipelines @ Clear2Pay / FIS & Multipharma
I’ll be your guide on this journey
THE MAP Short introduction to Jenkins
Birth of a pipeline
Manual mode
The Job DSL
Branching and its consequences
Pipeline as code
Pipeline as not code
Automation of automation
We want to get there
Look, there is another

beach here!
Do not go there!
💀
DO YOU KNOW WHO THIS IS?
JENKINS
▸ http://jenkins-ci.org/
▸ Very versatile Continuous Integration engine
▸ ~ 70% of the CI market (2012 figures)
▸ Open source - strong community
▸ Extensible
▸ more than 1000 plugins
▸ easy to develop new ones
▸ Job scheduler
▸ Integrates with basically everything
JENKINS - JOBS & FOLDERS
JENKINS - JOBS IN FOLDER
JENKINS - PIPELINE VIEWS
JENKINS - JOB
JENKINS - JOB CONFIGURATION
Let’s get some sources…
JENKINS - JOB CONFIGURATION
Let’s run some Bash…
JENKINS - JOB CONFIGURATION
Let’s launch some Gradle…
JENKINS - JOB CONFIGURATION
Let’s trigger another job…
PIPELINES
▸ Defining jobs
▸ Linking them together
▸ Running them in parallel or in sequence
▸ Some triggers are automatic, other ones are manual
BUILD
DEPLOY ENV 1
DEPLOY ENV 2
DEPLOY ENV 3
PUBLICATION RELEASE
A PIPELINE IS BORN
BUILD
DEPLOY ENV 1
DEPLOY ENV 2
DEPLOY ENV 3
PUBLICATION RELEASE
BUILD
DEPLOY ENV 1
DEPLOY ENV 2
DEPLOY ENV 3
PUBLICATION RELEASE
BUILD
DEPLOY ENV 1
DEPLOY ENV 2
DEPLOY ENV 3
PUBLICATION RELEASE
Commit 1
Commit 2
Commit 3
SO FAR SO GOOD
“Look Ma, I’ve built a pipeline!”
“Lovely. Now, build one for your sister.”
THE STORY
▸ 40+ projects…
▸ …several maintenance & feature branches per project
▸ … complex validation pipelines (10 - 20 jobs)
▸ … thousands of jobs
▸ … only a small team for Jenkins
Jenkins team
> 2700 jobs and growing…
In order to scale, we want:
✔ Self service
✔ Security
✔ Simplicity
✔ Extensibility
“What are we?”
“Developers!”
“What do we do?”
“Code!”
“Why do we do it?”
“Automation!”
PIPELINE AS CODE
▸ The Job DSL
▸ Pipeline as code
▸ Pipeline libraries
▸ Pipeline as properties
▸ Pipeline automation
JOB DSL PLUGIN - START OF THE JOURNEY OUT OF THE JUNGLE
▸ Define a job using a Groovy based DSL!
JOB DSL PLUGIN
▸ Very well supported
▸ Very good documentation
▸ Supports most of the plugins
▸ Built-in extensibility: inline or DSL extensions
JOB DSL PLUGIN
▸ Folders & views
▸ … automatic triggers upon generation
▸ … using files in workspace
JOB DSL PLUG-IN
▸ This remains code…
JOB DSL PLUGIN
▸ DSL based generation done from a job
▸ Can generate and/or update other jobs
▸ Can even run while jobs are running :)
SEED JOB GENERATED JOB(S)
DSL SCRIPT
Generates
Accesses (SCM or inline)
GENERATED JOB(S)
GENERATED JOB(S)
BRANCHING
▸ One Seed DSL job is all very good but…
▸ Pipeline evolves with the code
▸ Different pipelines for different branches
develop
release/2.0
Needs a new job
Pipelines for releases

might be more complex
PIPELINE AS CODE
▸ Your pipeline is linked to the code it builds
▸ Define your pipeline in your code
Project
src
pom.xml
job-dsl-script.groovy
PIPELINE CODE DUPLICATION
▸ We can now generate a pipeline for any branch, any commit







▸ It evolves with your branches and is merged like any other piece of code
▸ That’s good enough for 1 project
▸ With several (many) projects, the level of DSL code duplication explodes!
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
PIPELINE CODE DUPLICATION
▸ Job DSL code duplication has the same issues than
production code duplication
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
✘ ✘ ✘ ✘ ✘ ✘
✘✘✘✘✘✘
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
✘✘✘✘✘✘
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
✘✘✘✘✘✘
DEVELOP
DSL SCRIPT
DEVELOP
DSL SCRIPT
✘
✘
DEVELOP
DSL SCRIPT
✘
DEVELOP
DSL SCRIPT
✘
LEASE/1.0
L SCRIPT
LEASE/1.0
L SCRIPT
LEASE/1.0
L SCRIPT
LEASE/1.0
L SCRIPT
DEVELOP FEATURE/BIG RELEASE/1.0 DEVELOP FEATURE/BIG RELEASE/1.0 DEVELOPLEASE/1.0
PIPELINE LIBRARIES TO THE RESCUE
▸ Pipeline is code
▸ Reuse of code through versioned libraries
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
PIPELINE DSL LIBRARY
1.1 1.0
Normal project

Can be tested

Can be released
PIPELINE LIBRARIES TO THE RESCUE
▸ DSL libraries as code libraries
DEVELOP FEATURE/BIG RELEASE/1.0
DSL SCRIPT DSL SCRIPT DSL SCRIPT
PIPELINE DSL LIBRARY
1.1 1.0
COMMON DSL LIBRARY
1.0
Dependencies
ARE WE DONE?
▸ We can describe a pipeline using a DSL
▸ The pipeline is defined together with the code it builds
▸ The DSL can use libraries to reduce code duplication
?
NOT QUITE…
▸ This is not enough to really scale
▸ We still have to write some DSL
▸ Self service ✔
▸ Security ✘
▸ Simplicity ✘
▸ Extensibility ✔
PIPELINE AS… PROPERTIES
▸ Let’s describe the pipeline using a properties file
▸ Which pipeline library & which version
▸ Configuration properties - specific to the library
▸ Property file format ubiquitous
▸ No code running on the master
▸ Can be used for reporting on all the pipelines!
PIPELINE AS PROPERTIES
seed.properties
SEED PLUGIN
▸ https://github.com/jenkinsci/seed-plugin
▸ Allows to generate:
▸ projects folders
▸ branches pipelines
▸ based on seed files (properties and/or DSL)
▸ integration with hooks
SEVERAL INTEGRATION MODES
SEED.PROPERTIES
SEED PLUGIN
SEED.PROPERTIES
SEED.GROOVYSEED.GROOVY
PIPELINE LIBRARY PIPELINE LIBRARY
BRANCH PIPELINE
95% 4%
1%
GENERATION STRUCTURE
SEED
PROJECT GENERATOR
PROJECT FOLDER
BOOTSTRAPPING
BRANCH GENERATOR
BRANCH FOLDER
BRANCH JOB 1
BRANCH JOB 2
BRANCH JOB 3
BRANCH JOB 4
GENERATION
Project teamJenkins team
Project only visible
by project team
SEED JOBS
BOOTSTRAPPING
GENERATION
GENERATION
AUTOMATION
HOOKS
▸ Generations can be automated using hooks at SCM level
▸ Support for GitHub, BitBucket, generic HTTP calls (for SVN)
▸ Configurable. For example:
BRANCH CREATION
SCM EVENT
Seed plug-in
COMMIT
SEED CHANGED
BRANCH DELETION
PIPELINE EVENT
Generation
Triggers the pipeline
Regenerates the pipeline
Deletes the pipeline
RESPONSIBILITIES
Jenkins team
Pipeline libraries
Develops and
maintains
Development team
seed.properties
Defines
Seed plug-in
SCM
Triggers
WHAT DID WE JUST ACHIEVE?
▸ Automation of automation
▸ Self service ✔
▸ Pipeline automation from SCM
▸ Security ✔
▸ Project level authorisations
▸ No code on the master
▸ Simplicity ✔
▸ Property files
▸ Extensibility ✔
▸ Pipeline libraries
▸ Direct job DSL still possible
YOU CAN NOW RELAX…
DEMO TIME
▸ Bootstrapping a project
▸ Configuring the project for GitHub
▸ Creating a branch —> Branch folder generated
▸ Committing on the branch —> Pipeline started
▸ Updating the pipeline branch —> Pipeline regenerated
▸ Deleting the branch —> Branch folder gone
DEMO - PIPELINE AS CODE
seed/seed.groovy
DEMO - GITHUB SETUP
DEMO - JENKINS SETUP
DEMO - BOOTSTRAPPING
A GLIMPSE OF THE FUTURE
▸ Jenkins 2.0
▸ Pipeline plug-in
▸ “Pipeline as Code” in the core
▸ How does the current solution fit?
SEED & PIPELINE PLUGIN
▸ The Seed plugin will keep working
▸ It can already generate pipeline jobs (Job DSL)
▸ But overlap of functionalities
Branch pipelines
Pipeline as code
SEED
PIPELINE
Hook integration
Pipeline as properties
Community & support
Pipeline libraries
Pipeline script library
SEED IN PIPELINE PLUGIN
▸ The Seed plugin as extension of the Pipeline plugin
Branch pipelines
Pipeline as code
SEED
PIPELINE
Hook integrationPipeline as properties
Community & support
Pipeline libraries
Pipeline script library
THANKS YOU!
Thanks to:
‣ BruJUG
‣ Olivier Hubaut
‣ ESI
Contact:
▸ http://nemerosa.com
▸ @DamienCoraboeuf

Brujug Jenkins pipeline scalability

  • 1.
    JOB SCALABILITY INJENKINS GETTING OUT OF THE JOB JUNGLE BruJUG - March 9th, 2016 - @DamienCoraboeuf
  • 2.
    WHO AM I? ▸Damien Coraboeuf (@DamienCoraboeuf) ▸ Born to Java in 1996 ▸ “Brol” engineer since 2008 ▸ Automating pipelines @ Clear2Pay / FIS & Multipharma I’ll be your guide on this journey
  • 3.
    THE MAP Shortintroduction to Jenkins Birth of a pipeline Manual mode The Job DSL Branching and its consequences Pipeline as code Pipeline as not code Automation of automation We want to get there Look, there is another
 beach here! Do not go there! 💀
  • 4.
    DO YOU KNOWWHO THIS IS?
  • 5.
    JENKINS ▸ http://jenkins-ci.org/ ▸ Veryversatile Continuous Integration engine ▸ ~ 70% of the CI market (2012 figures) ▸ Open source - strong community ▸ Extensible ▸ more than 1000 plugins ▸ easy to develop new ones ▸ Job scheduler ▸ Integrates with basically everything
  • 6.
    JENKINS - JOBS& FOLDERS
  • 7.
    JENKINS - JOBSIN FOLDER
  • 8.
  • 9.
  • 10.
    JENKINS - JOBCONFIGURATION Let’s get some sources…
  • 11.
    JENKINS - JOBCONFIGURATION Let’s run some Bash…
  • 12.
    JENKINS - JOBCONFIGURATION Let’s launch some Gradle…
  • 13.
    JENKINS - JOBCONFIGURATION Let’s trigger another job…
  • 14.
    PIPELINES ▸ Defining jobs ▸Linking them together ▸ Running them in parallel or in sequence ▸ Some triggers are automatic, other ones are manual BUILD DEPLOY ENV 1 DEPLOY ENV 2 DEPLOY ENV 3 PUBLICATION RELEASE
  • 15.
    A PIPELINE ISBORN BUILD DEPLOY ENV 1 DEPLOY ENV 2 DEPLOY ENV 3 PUBLICATION RELEASE BUILD DEPLOY ENV 1 DEPLOY ENV 2 DEPLOY ENV 3 PUBLICATION RELEASE BUILD DEPLOY ENV 1 DEPLOY ENV 2 DEPLOY ENV 3 PUBLICATION RELEASE Commit 1 Commit 2 Commit 3
  • 16.
    SO FAR SOGOOD “Look Ma, I’ve built a pipeline!” “Lovely. Now, build one for your sister.”
  • 17.
    THE STORY ▸ 40+projects… ▸ …several maintenance & feature branches per project ▸ … complex validation pipelines (10 - 20 jobs) ▸ … thousands of jobs ▸ … only a small team for Jenkins Jenkins team > 2700 jobs and growing…
  • 19.
    In order toscale, we want: ✔ Self service ✔ Security ✔ Simplicity ✔ Extensibility
  • 20.
    “What are we?” “Developers!” “Whatdo we do?” “Code!” “Why do we do it?” “Automation!”
  • 21.
    PIPELINE AS CODE ▸The Job DSL ▸ Pipeline as code ▸ Pipeline libraries ▸ Pipeline as properties ▸ Pipeline automation
  • 22.
    JOB DSL PLUGIN- START OF THE JOURNEY OUT OF THE JUNGLE ▸ Define a job using a Groovy based DSL!
  • 23.
    JOB DSL PLUGIN ▸Very well supported ▸ Very good documentation ▸ Supports most of the plugins ▸ Built-in extensibility: inline or DSL extensions
  • 24.
    JOB DSL PLUGIN ▸Folders & views ▸ … automatic triggers upon generation ▸ … using files in workspace
  • 25.
    JOB DSL PLUG-IN ▸This remains code…
  • 26.
    JOB DSL PLUGIN ▸DSL based generation done from a job ▸ Can generate and/or update other jobs ▸ Can even run while jobs are running :) SEED JOB GENERATED JOB(S) DSL SCRIPT Generates Accesses (SCM or inline) GENERATED JOB(S) GENERATED JOB(S)
  • 27.
    BRANCHING ▸ One SeedDSL job is all very good but… ▸ Pipeline evolves with the code ▸ Different pipelines for different branches develop release/2.0 Needs a new job Pipelines for releases
 might be more complex
  • 28.
    PIPELINE AS CODE ▸Your pipeline is linked to the code it builds ▸ Define your pipeline in your code Project src pom.xml job-dsl-script.groovy
  • 29.
    PIPELINE CODE DUPLICATION ▸We can now generate a pipeline for any branch, any commit
 
 
 
 ▸ It evolves with your branches and is merged like any other piece of code ▸ That’s good enough for 1 project ▸ With several (many) projects, the level of DSL code duplication explodes! DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT
  • 30.
    PIPELINE CODE DUPLICATION ▸Job DSL code duplication has the same issues than production code duplication DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT ✘ ✘ ✘ ✘ ✘ ✘ ✘✘✘✘✘✘ DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT ✘✘✘✘✘✘ DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT ✘✘✘✘✘✘ DEVELOP DSL SCRIPT DEVELOP DSL SCRIPT ✘ ✘ DEVELOP DSL SCRIPT ✘ DEVELOP DSL SCRIPT ✘ LEASE/1.0 L SCRIPT LEASE/1.0 L SCRIPT LEASE/1.0 L SCRIPT LEASE/1.0 L SCRIPT DEVELOP FEATURE/BIG RELEASE/1.0 DEVELOP FEATURE/BIG RELEASE/1.0 DEVELOPLEASE/1.0
  • 32.
    PIPELINE LIBRARIES TOTHE RESCUE ▸ Pipeline is code ▸ Reuse of code through versioned libraries DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT PIPELINE DSL LIBRARY 1.1 1.0 Normal project
 Can be tested
 Can be released
  • 33.
    PIPELINE LIBRARIES TOTHE RESCUE ▸ DSL libraries as code libraries DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT PIPELINE DSL LIBRARY 1.1 1.0 COMMON DSL LIBRARY 1.0 Dependencies
  • 34.
    ARE WE DONE? ▸We can describe a pipeline using a DSL ▸ The pipeline is defined together with the code it builds ▸ The DSL can use libraries to reduce code duplication ?
  • 35.
    NOT QUITE… ▸ Thisis not enough to really scale ▸ We still have to write some DSL ▸ Self service ✔ ▸ Security ✘ ▸ Simplicity ✘ ▸ Extensibility ✔
  • 36.
    PIPELINE AS… PROPERTIES ▸Let’s describe the pipeline using a properties file ▸ Which pipeline library & which version ▸ Configuration properties - specific to the library ▸ Property file format ubiquitous ▸ No code running on the master ▸ Can be used for reporting on all the pipelines!
  • 37.
  • 38.
    SEED PLUGIN ▸ https://github.com/jenkinsci/seed-plugin ▸Allows to generate: ▸ projects folders ▸ branches pipelines ▸ based on seed files (properties and/or DSL) ▸ integration with hooks
  • 39.
    SEVERAL INTEGRATION MODES SEED.PROPERTIES SEEDPLUGIN SEED.PROPERTIES SEED.GROOVYSEED.GROOVY PIPELINE LIBRARY PIPELINE LIBRARY BRANCH PIPELINE 95% 4% 1%
  • 40.
    GENERATION STRUCTURE SEED PROJECT GENERATOR PROJECTFOLDER BOOTSTRAPPING BRANCH GENERATOR BRANCH FOLDER BRANCH JOB 1 BRANCH JOB 2 BRANCH JOB 3 BRANCH JOB 4 GENERATION Project teamJenkins team Project only visible by project team
  • 41.
  • 42.
  • 43.
    HOOKS ▸ Generations canbe automated using hooks at SCM level ▸ Support for GitHub, BitBucket, generic HTTP calls (for SVN) ▸ Configurable. For example: BRANCH CREATION SCM EVENT Seed plug-in COMMIT SEED CHANGED BRANCH DELETION PIPELINE EVENT Generation Triggers the pipeline Regenerates the pipeline Deletes the pipeline
  • 44.
    RESPONSIBILITIES Jenkins team Pipeline libraries Developsand maintains Development team seed.properties Defines Seed plug-in SCM Triggers
  • 45.
    WHAT DID WEJUST ACHIEVE? ▸ Automation of automation ▸ Self service ✔ ▸ Pipeline automation from SCM ▸ Security ✔ ▸ Project level authorisations ▸ No code on the master ▸ Simplicity ✔ ▸ Property files ▸ Extensibility ✔ ▸ Pipeline libraries ▸ Direct job DSL still possible
  • 46.
    YOU CAN NOWRELAX…
  • 47.
    DEMO TIME ▸ Bootstrappinga project ▸ Configuring the project for GitHub ▸ Creating a branch —> Branch folder generated ▸ Committing on the branch —> Pipeline started ▸ Updating the pipeline branch —> Pipeline regenerated ▸ Deleting the branch —> Branch folder gone
  • 48.
    DEMO - PIPELINEAS CODE seed/seed.groovy
  • 49.
  • 50.
  • 51.
  • 52.
    A GLIMPSE OFTHE FUTURE ▸ Jenkins 2.0 ▸ Pipeline plug-in ▸ “Pipeline as Code” in the core ▸ How does the current solution fit?
  • 53.
    SEED & PIPELINEPLUGIN ▸ The Seed plugin will keep working ▸ It can already generate pipeline jobs (Job DSL) ▸ But overlap of functionalities Branch pipelines Pipeline as code SEED PIPELINE Hook integration Pipeline as properties Community & support Pipeline libraries Pipeline script library
  • 54.
    SEED IN PIPELINEPLUGIN ▸ The Seed plugin as extension of the Pipeline plugin Branch pipelines Pipeline as code SEED PIPELINE Hook integrationPipeline as properties Community & support Pipeline libraries Pipeline script library
  • 55.
    THANKS YOU! Thanks to: ‣BruJUG ‣ Olivier Hubaut ‣ ESI Contact: ▸ http://nemerosa.com ▸ @DamienCoraboeuf