SlideShare a Scribd company logo
1 of 73
Download to read offline
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Building Pipelines
at Scale
Julien Pivotto
inuits.eu
25th June 2014
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
..
Building Pipelines at Scale
Introduction
Who’s who
Pipelines
Puppet
Why
How
Conclusion
Plugins
Why
How
Conclusion
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Who’s who
.
..
Julien Pivotto
Open-Source Consultant at inuits.eu
Linux Systems Administrator
FOSS Defender for many years
ΠDevOps
Puppet user since 2011
Doing also some Ruby & Python
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Who’s who
.
..
inuits
Open-Source Consultancy company
50+ people in 4 countries (.be, .ua, .nl & .cz)
Doing both Development & Systems Administration
A lot of domains: Linux, Web, Databases, Monitoring…
Early DevOps practitioners
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Who’s who
.
..
MediaMosa
Drupal-based Digital Asset Management system
Open-source
Store assets
Transcode videos
Create, extract and manage metadata using open standards:
Dublin Core, Qualified DC, IEEE/LOM, CZP
Webservice oriented
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Who’s who
.
..
MediaSalsa: MediaMosa As a Service
A turn-key MediaMosa solution
A few environments:
Dev/Uat/Prod environments
Customer-specific environments
One backend per environment
Multiple frontends per backend
= A lot of Drupal sites
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Definition of pipelines
..
A pipeline is a chain of Jenkins jobs that are run to fetch,
compile, package, run tests and deploy an application (build
pipeline plugin).
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Definition of pipelines
..
A pipeline is a chain of Jenkins jobs that are run to fetch,
compile, package, run tests and deploy an application (build
pipeline plugin).
Pipeline vs large (or independent) jobs:
Separation between different tasks
Overview of tests, etc…
Deployment depends on testing
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Example: a puppet pipeline
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Inside the pipeline
Checkout
Style
Syntax
Compile
Unit tests
Integration tests
Packaging
Regression tests
Deployment / Delivery
…
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Ok, let’s use pipelines!
Let’s make a pipeline for our puppet code
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Ok, let’s use pipelines!
Let’s make a pipeline for our puppet code
…and one for our puppet code in dev environment
…and one for our puppet code in uat environment
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Ok, let’s use pipelines!
Let’s make a pipeline for our puppet code
…and one for our puppet code in dev environment
…and one for our puppet code in uat environment
Let’s make a pipeline for backend app
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Ok, let’s use pipelines!
Let’s make a pipeline for our puppet code
…and one for our puppet code in dev environment
…and one for our puppet code in uat environment
Let’s make a pipeline for backend app
…and one for backend app in dev environment
…and one for backend app in uat environment
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Ok, let’s use pipelines!
Let’s make a pipeline for our puppet code
…and one for our puppet code in dev environment
…and one for our puppet code in uat environment
Let’s make a pipeline for backend app
…and one for backend app in dev environment
…and one for backend app in uat environment
Let’s make 5 pipelines for frontend apps
…and 5 for frontends apps in dev environment
…and 5 for frontends apps in uat environment
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
How to scale?
First attempt: clone jobs in the ui
Dozens of jobs to clone & edit
Human intervention = mistakes
Second attempt: clone jobs xml files
grep & cp & sed…
Crappy bash scripting is crappy
Mmmh…we need something else…
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Let’s change the pipelines now!
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Let’s change the pipelines now!
click
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Let’s change the pipelines now!
click click
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Let’s change the pipelines now!
click click click click click
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Let’s change the pipelines now!
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Introduction/Pipelines
.
..
Let’s change the pipelines now!
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click click click click click click click click click click click
click click click
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet
.
Puppet
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Why
.
..
Infrastructure as Code
Puppet/Chef/Cfengine/…same fight:
Modelize your infrastructure
Reproducable platforms
Fast and reliable
Disaster recovery for ”free”
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Why
.
..
What to puppetize
Usually you puppetize:
OS installation & configuration
Apps installation & configuration
DB installation & configuration
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Why
.
..
What to puppetize
Usually you puppetize:
OS installation & configuration
Apps installation & configuration
DB installation & configuration
But you do not automate:
Application data
Are Jenkins jobs to be puppetized?
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Why
.
..
What to puppetize
Usually you puppetize:
OS installation & configuration
Apps installation & configuration
DB installation & configuration
But you do not automate:
Application data
Are Jenkins jobs to be puppetized?
…we tried…
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
Modules structure
Using the Jenkins upstream module
And creating a specific jenkinsjobs module
Difficult to share
Mainly templates
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
Structure of the module
manifests
job.pp (definition; file)
packages.pp (packages needed by tests)
dashboard.pp (augeas xml to modify jenkins config)
pipeline/frontend.pp (definition; jobs)
pipeline/backend.pp (definition; jobs)
service.pp (exec to reload configuration)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
job.pp
Takes a template as parameter
Creates xml file and reload jenkins configuration
It has a lot more arguments (project name, next job, etc…)
Adds the job to the view (augeas)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
service.pp
Reload the Jenkins service
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
service.pp
Reload the Jenkins service
..
java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar
-s http://127.0.0.1:8080/ reload-configuration
--username "${username}" --password "${password}"
It makes Jenkins unavailable
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
pipeline.pp
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
pipeline.pp
..
Defaults for jobs
.
Jenkinsjobs::Job{
ensure => $ensure,
git_repository => $git_repository,
customer => $customer,
assigned_node => $debian_slave,
dashboard_view => $dashboard_view,
package_name => "frontend-${customer}",
vhost_docroot => $_vhost_docroot,
custom_modules => 'sites/all/modules/custom',
job_type => 'drupal',
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
pipeline.pp
..
Defaults for promotions
.
Jenkinsjobs::Promotion{
ensure => $ensure,
customer => $customer,
assigned_node => $debian_slave,
packaging_job => "frontend-build-${customer}",
package_name => "frontend-${customer}",
vhost_docroot => $_vhost_docroot,
job_name => "frontend-promo-${customer}",
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
pipeline.pp
..
Jobs definitions
.
jenkinsjobs::job{
"frontend-checkout-${customer}":
job_template => 'jj/jobs/checkout.erb',
next_job => "frontend-syntax-${customer}",
start_pipeline => true,
}
jenkinsjobs::job{
"frontend-syntax-${customer}":
job_template => 'jj/jobs/syntax.erb',
next_job => "frontend-style-${customer}",
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
pipeline.pp
..
Job with promotions
.
jenkinsjobs::job{
"frontend-promo-${customer}":
job_template => 'jj/jobs/promote.erb',
promotions => [
"deploy-${customer}-front-to-uat",
"deploy-${customer}-front-to-prod",
"deploy-${customer}-front-to-com-prod",
],
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
pipeline.pp
..
Promotions
.
if 'uat' in $targets {
jenkinsjobs::promotion {
"deploy-${customer}-front-to-uat":
template => 'jj/promotion/uat.erb',
debian_repo => 'mediamosa-uat',
targets => $targets['viaa-uat'],
}
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/How
.
..
dashboard.pp
..
Augeas example
.
augeas {
"dashboard view $title":
lens => 'Xml.lns',
incl => '/var/lib/jenkins/config.xml',
context => '/files/var/lib/jenkins/config.xml',
changes => [
"set ${augeas_prefix}[last()+1]/owner/#attribute/class "hudson"",
"set ${augeas_prefix}[last()]/owner/#attribute/reference "../../.."",
"set ${augeas_prefix}[last()]/includeStdJobList/#text "true"",
"set ${augeas_prefix}[last()]/name/#text "${title}"",
],
onlyif =>
"match ${file_prefix}/hudson/views/*/name/#text[.="${title}"] size == 0",
notify => Exec['reload-jenkins'],
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Advantages of setting pipelines in Puppet
Easy to deploy new pipelines
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Advantages of setting pipelines in Puppet
Easy to deploy new pipelines
Deploy pipelines in the same time as applications (exported
resources)
Define pipelines at the same place as applications (puppet)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Advantages of setting pipelines in Puppet
Easy to deploy new pipelines
Deploy pipelines in the same time as applications (exported
resources)
Define pipelines at the same place as applications (puppet)
Track history of pipeline changes
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Advantages of setting pipelines in Puppet
Easy to deploy new pipelines
Deploy pipelines in the same time as applications (exported
resources)
Define pipelines at the same place as applications (puppet)
Track history of pipeline changes
Having separate jobs for each project
Reuse puppet template functionality
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Advantages of setting pipelines in Puppet
Easy to deploy new pipelines
Deploy pipelines in the same time as applications (exported
resources)
Define pipelines at the same place as applications (puppet)
Track history of pipeline changes
Having separate jobs for each project
Reuse puppet template functionality
Deploy new Jenkins server in minutes with all jobs
Keep several Jenkins (test, prod) in sync
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Advantages of setting pipelines in Puppet
Easy to deploy new pipelines
Deploy pipelines in the same time as applications (exported
resources)
Define pipelines at the same place as applications (puppet)
Track history of pipeline changes
Having separate jobs for each project
Reuse puppet template functionality
Deploy new Jenkins server in minutes with all jobs
Keep several Jenkins (test, prod) in sync
Add ssh keys, git config, etc…in Puppet too
Create test databases & vhosts in Puppet (exported resources)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Puppet/Conclusion
.
..
Disadvantages
Play with Augeas & xml (wrong feeling)
Makes Jenkins unavailable on changes
Every small change ends up in Puppet
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins
.
Plugins
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/Why
.
..
A lighter approach: Jenkins plugins
Remove the Puppet complexity
Still having Pipelines in sync
Minimize human intervention
Speed-up the pipelines
Do not restart Jenkins each time
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Plugin #1: Build flow
Creates Pipelines
Uses Groovy scripts
Can run jobs in parallel
Several other plugins do the same
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
..
Pipelines
.
build ( "syntax" )
build ( "lint" )
build ( "rspec" )
build ( "doc" )
build ( "package" )
build ( "release" )
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
..
Parallel jobs
.
parallel (
{
build ( "syntax" )
},
{
build ( "lint" )
},
{
build ( "rspec" )
},
)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
..
Conditionals
.
if ( params["RELEASE"] == "true" ) {
switch ( params["DEPLOY_METHOD"] ) {
case "librarian":
build ( "librarian" )
case "r10k":
build ( "r10k" )
case "package":
build ( "package" )
}
}
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
..
Build parameters
.
build ( "gitsubmodules",
NAME: params["NAME"],
ENVIRONMENT: params["ENVIRONMENT"]
)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow: Groovy scripts
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
But also…
A ”retry” function to try the failing jobs 2, 3, 4 time
A ”rescue” function to launch a jobs if another fails
The first job fails if one of the pipeline jobs fails!
And a lot of other stuffs
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Plugin #2: Job Generator
Jenkins jobs generator
Creates jobs on the fly
Jobs do not need to be created at the start of the (flow)
pipeline
Also updates existing jobs
Allows to keep jobs per project (per project history and
graphes)
Takes special parameters
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Build Flow Plugin + Job generator
One starting job (orchestrator)
Calls some jobs or some generators, in parallel
Ends with a nice, up-to-date Pipeline
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Plugins/How
.
..
Plugin #3: JobConfigHistory Plugin
Keeps track of the changes in the jobs
Alternative to keep the xml in git
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
Conclusion
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server: Think slaves
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server: Think slaves
SCM pulling
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server: Think slaves
SCM pulling: Think Gerrit or Trigger
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server: Think slaves
SCM pulling: Think Gerrit or Trigger
Jobs are slow
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server: Think slaves
SCM pulling: Think Gerrit or Trigger
Jobs are slow: Optimize, Divide them, Monitor them
(graphite)
Notifications
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Other bottlenecks/problems at scale
Load of the Jenkins server: Think slaves
SCM pulling: Think Gerrit or Trigger
Jobs are slow: Optimize, Divide them, Monitor them
(graphite)
Notifications: Think XMPP, IRC, mails, Gerrit…
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Pipelines at scale…
Two different approaches
application-level
infrastructure-level
Pick the one you prefer (or invent your own)
Do not hesitate to separate Jobs
Monitor your jobs/pipelines (graphite)
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
Thank you!
Thanks to my colleague @tomdevylder for the Build Flow slides
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
Conclusion
.
..
Contact
Julien Pivotto
julien@inuits.eu
@roidelapluie
Inuits BVBA
Belgium
+32 473 441 636
https://inuits.eu
Jenkins User Conference Europe #jenkinsconf
Corporate Community
Thank You To Our Sponsors
Platinum Gold
Silver
.
.
.
Jenkins User Conference Europe
.
#jenkinsconf
.
#jenkinsconf

More Related Content

What's hot

Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014CloudBees
 
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins PipelinesAn Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins PipelinesSteffen Gebert
 
Testing with Docker
Testing with DockerTesting with Docker
Testing with Dockertoffermann
 
Delivery Pipeline as Code: using Jenkins 2.0 Pipeline
Delivery Pipeline as Code: using Jenkins 2.0 PipelineDelivery Pipeline as Code: using Jenkins 2.0 Pipeline
Delivery Pipeline as Code: using Jenkins 2.0 PipelineSlawa Giterman
 
JUC Europe 2015: Scaling Your Jenkins Master with Docker
JUC Europe 2015: Scaling Your Jenkins Master with DockerJUC Europe 2015: Scaling Your Jenkins Master with Docker
JUC Europe 2015: Scaling Your Jenkins Master with DockerCloudBees
 
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-CodeSD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-CodeBrian Dawson
 
Pipeline as code - new feature in Jenkins 2
Pipeline as code - new feature in Jenkins 2Pipeline as code - new feature in Jenkins 2
Pipeline as code - new feature in Jenkins 2Michal Ziarnik
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandTroublemaker Khunpech
 
JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"
JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"
JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"CloudBees
 
7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins UsersJules Pierre-Louis
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Docker, Inc.
 
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and MaintenanceJUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and MaintenanceCloudBees
 
Jenkins days workshop pipelines - Eric Long
Jenkins days workshop  pipelines - Eric LongJenkins days workshop  pipelines - Eric Long
Jenkins days workshop pipelines - Eric Longericlongtx
 
Continuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsContinuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsCamilo Ribeiro
 
Let’s start Continuous Integration with jenkins
Let’s start Continuous Integration with jenkinsLet’s start Continuous Integration with jenkins
Let’s start Continuous Integration with jenkinsTomohide Kakeya
 
Automate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOpsAutomate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOpsDaniel Oh
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyJUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyCloudBees
 
JUC Europe 2015: Enabling Continuous Delivery for Major Retailers
JUC Europe 2015: Enabling Continuous Delivery for Major RetailersJUC Europe 2015: Enabling Continuous Delivery for Major Retailers
JUC Europe 2015: Enabling Continuous Delivery for Major RetailersCloudBees
 
Continuous Integration With Jenkins Docker SQL Server
Continuous Integration With Jenkins Docker SQL ServerContinuous Integration With Jenkins Docker SQL Server
Continuous Integration With Jenkins Docker SQL ServerChris Adkin
 

What's hot (20)

Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014
 
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins PipelinesAn Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
 
Testing with Docker
Testing with DockerTesting with Docker
Testing with Docker
 
Delivery Pipeline as Code: using Jenkins 2.0 Pipeline
Delivery Pipeline as Code: using Jenkins 2.0 PipelineDelivery Pipeline as Code: using Jenkins 2.0 Pipeline
Delivery Pipeline as Code: using Jenkins 2.0 Pipeline
 
JUC Europe 2015: Scaling Your Jenkins Master with Docker
JUC Europe 2015: Scaling Your Jenkins Master with DockerJUC Europe 2015: Scaling Your Jenkins Master with Docker
JUC Europe 2015: Scaling Your Jenkins Master with Docker
 
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-CodeSD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
SD DevOps Meet-up - Jenkins 2.0 and Pipeline-as-Code
 
Pipeline as code - new feature in Jenkins 2
Pipeline as code - new feature in Jenkins 2Pipeline as code - new feature in Jenkins 2
Pipeline as code - new feature in Jenkins 2
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"
JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"
JUC Europe 2015: Bringing CD at Cloud-Scale with Jenkins, Docker and "Tiger"
 
7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users
 
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
Build, Publish, Deploy and Test Docker images and containers with Jenkins Wor...
 
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and MaintenanceJUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
JUC Europe 2015: Scaling of Jenkins Pipeline Creation and Maintenance
 
Jenkins days workshop pipelines - Eric Long
Jenkins days workshop  pipelines - Eric LongJenkins days workshop  pipelines - Eric Long
Jenkins days workshop pipelines - Eric Long
 
Continuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsContinuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and Jenkins
 
Let’s start Continuous Integration with jenkins
Let’s start Continuous Integration with jenkinsLet’s start Continuous Integration with jenkins
Let’s start Continuous Integration with jenkins
 
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...
 
Automate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOpsAutomate App Container Delivery with CI/CD and DevOps
Automate App Container Delivery with CI/CD and DevOps
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyJUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and Groovy
 
JUC Europe 2015: Enabling Continuous Delivery for Major Retailers
JUC Europe 2015: Enabling Continuous Delivery for Major RetailersJUC Europe 2015: Enabling Continuous Delivery for Major Retailers
JUC Europe 2015: Enabling Continuous Delivery for Major Retailers
 
Continuous Integration With Jenkins Docker SQL Server
Continuous Integration With Jenkins Docker SQL ServerContinuous Integration With Jenkins Docker SQL Server
Continuous Integration With Jenkins Docker SQL Server
 

Viewers also liked

Pipeline: Continuous Delivery as Code in Jenkins 2.0
Pipeline: Continuous Delivery as Code in Jenkins 2.0Pipeline: Continuous Delivery as Code in Jenkins 2.0
Pipeline: Continuous Delivery as Code in Jenkins 2.0Jules Pierre-Louis
 
(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines(Declarative) Jenkins Pipelines
(Declarative) Jenkins PipelinesSteffen Gebert
 
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?Carlos Sanchez
 
Jenkins scaling best practices
Jenkins scaling best practicesJenkins scaling best practices
Jenkins scaling best practicesHenry McBride
 
Introduction to Amazon EC2 Container Service and setting up build pipeline wi...
Introduction to Amazon EC2 Container Service and setting up build pipeline wi...Introduction to Amazon EC2 Container Service and setting up build pipeline wi...
Introduction to Amazon EC2 Container Service and setting up build pipeline wi...Swapnil Dahiphale
 
Adapting Deployment Pipelines for Complex Applications
Adapting Deployment Pipelines for Complex ApplicationsAdapting Deployment Pipelines for Complex Applications
Adapting Deployment Pipelines for Complex ApplicationsIBM UrbanCode Products
 
Learn Dashing Widget in 90 minutes
Learn Dashing Widget in 90 minutesLearn Dashing Widget in 90 minutes
Learn Dashing Widget in 90 minutesLarry Cai
 
JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineJCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineChing Yi Chan
 
Automated Testing Environment by Bugzilla, Testopia and Jenkins
Automated Testing Environment by Bugzilla, Testopia and JenkinsAutomated Testing Environment by Bugzilla, Testopia and Jenkins
Automated Testing Environment by Bugzilla, Testopia and Jenkinswalkerchang
 
SCM Puppet: from an intro to the scaling
SCM Puppet: from an intro to the scalingSCM Puppet: from an intro to the scaling
SCM Puppet: from an intro to the scalingStanislav Osipov
 
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!Eric Wendelin
 
Continuous Integration With Hudson (and Jenkins)
Continuous Integration With Hudson (and Jenkins)Continuous Integration With Hudson (and Jenkins)
Continuous Integration With Hudson (and Jenkins)Carlo Bonamico
 
Continuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconf
Continuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconfContinuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconf
Continuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconfJulia Mateo
 
Jenkins - From Continuous Integration to Continuous Delivery
Jenkins - From Continuous Integration to Continuous DeliveryJenkins - From Continuous Integration to Continuous Delivery
Jenkins - From Continuous Integration to Continuous DeliveryVirendra Bhalothia
 
Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Tracy Kennedy
 
Jenkins and Chef: Infrastructure CI and Automated Deployment
Jenkins and Chef: Infrastructure CI and Automated DeploymentJenkins and Chef: Infrastructure CI and Automated Deployment
Jenkins and Chef: Infrastructure CI and Automated DeploymentDan Stine
 

Viewers also liked (20)

Pipeline: Continuous Delivery as Code in Jenkins 2.0
Pipeline: Continuous Delivery as Code in Jenkins 2.0Pipeline: Continuous Delivery as Code in Jenkins 2.0
Pipeline: Continuous Delivery as Code in Jenkins 2.0
 
(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines
 
Jenkins Pipelines
Jenkins PipelinesJenkins Pipelines
Jenkins Pipelines
 
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
Scaling Jenkins with Docker: Swarm, Kubernetes or Mesos?
 
Jenkins scaling best practices
Jenkins scaling best practicesJenkins scaling best practices
Jenkins scaling best practices
 
Introduction to Amazon EC2 Container Service and setting up build pipeline wi...
Introduction to Amazon EC2 Container Service and setting up build pipeline wi...Introduction to Amazon EC2 Container Service and setting up build pipeline wi...
Introduction to Amazon EC2 Container Service and setting up build pipeline wi...
 
Adapting Deployment Pipelines for Complex Applications
Adapting Deployment Pipelines for Complex ApplicationsAdapting Deployment Pipelines for Complex Applications
Adapting Deployment Pipelines for Complex Applications
 
Docker Swarm scheduling in 1.12
Docker Swarm scheduling in 1.12Docker Swarm scheduling in 1.12
Docker Swarm scheduling in 1.12
 
Learn Dashing Widget in 90 minutes
Learn Dashing Widget in 90 minutesLearn Dashing Widget in 90 minutes
Learn Dashing Widget in 90 minutes
 
JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineJCConf2016 Jenkins Pipeline
JCConf2016 Jenkins Pipeline
 
Automated Testing Environment by Bugzilla, Testopia and Jenkins
Automated Testing Environment by Bugzilla, Testopia and JenkinsAutomated Testing Environment by Bugzilla, Testopia and Jenkins
Automated Testing Environment by Bugzilla, Testopia and Jenkins
 
SCM Puppet: from an intro to the scaling
SCM Puppet: from an intro to the scalingSCM Puppet: from an intro to the scaling
SCM Puppet: from an intro to the scaling
 
JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!JavaScript + Jenkins = Winning!
JavaScript + Jenkins = Winning!
 
Jenkins-CI
Jenkins-CIJenkins-CI
Jenkins-CI
 
Continuous Integration With Hudson (and Jenkins)
Continuous Integration With Hudson (and Jenkins)Continuous Integration With Hudson (and Jenkins)
Continuous Integration With Hudson (and Jenkins)
 
Continuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconf
Continuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconfContinuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconf
Continuous delivery with Jenkins, Docker and Mesos/Marathon - jbcnconf
 
Jenkins 2.0 (日本語)
Jenkins 2.0 (日本語)Jenkins 2.0 (日本語)
Jenkins 2.0 (日本語)
 
Jenkins - From Continuous Integration to Continuous Delivery
Jenkins - From Continuous Integration to Continuous DeliveryJenkins - From Continuous Integration to Continuous Delivery
Jenkins - From Continuous Integration to Continuous Delivery
 
Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)
 
Jenkins and Chef: Infrastructure CI and Automated Deployment
Jenkins and Chef: Infrastructure CI and Automated DeploymentJenkins and Chef: Infrastructure CI and Automated Deployment
Jenkins and Chef: Infrastructure CI and Automated Deployment
 

Similar to Building Jenkins Pipelines at Scale

Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Lorenzo Miniero
 
Jenkins User Conference: Building Your Continuous Delivery Toolkit
Jenkins User Conference: Building Your Continuous Delivery ToolkitJenkins User Conference: Building Your Continuous Delivery Toolkit
Jenkins User Conference: Building Your Continuous Delivery ToolkitXebiaLabs
 
Going literate in Amadeus JUC Berlin June 25th 2014
Going literate in Amadeus JUC Berlin June 25th 2014Going literate in Amadeus JUC Berlin June 25th 2014
Going literate in Amadeus JUC Berlin June 25th 2014Vincent Latombe
 
Building your Continuous Delivery Toolkit @ JUC SF 2014
Building your Continuous Delivery Toolkit @ JUC SF 2014Building your Continuous Delivery Toolkit @ JUC SF 2014
Building your Continuous Delivery Toolkit @ JUC SF 2014XebiaLabs
 
Lean Engineering: How to make Engineering a full Lean UX partner
Lean Engineering: How to make Engineering a full Lean UX partnerLean Engineering: How to make Engineering a full Lean UX partner
Lean Engineering: How to make Engineering a full Lean UX partnerBill Scott
 
Getting to push_button_deploys
Getting to push_button_deploysGetting to push_button_deploys
Getting to push_button_deploysChristian Mague
 
Juc paris olivier lamy talk
Juc paris olivier lamy talkJuc paris olivier lamy talk
Juc paris olivier lamy talkOlivier Lamy
 
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...CloudBees
 
Jenkins Made Easy - Jenkins User Conference 2015 at London
Jenkins Made Easy - Jenkins User Conference 2015 at LondonJenkins Made Easy - Jenkins User Conference 2015 at London
Jenkins Made Easy - Jenkins User Conference 2015 at LondonNobuaki Ogawa
 
Configuration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL PluginConfiguration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL PluginDaniel Spilker
 
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)Andrew Bayer
 
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as codeVoxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as codeDamien Duportal
 
Symfony4 - A new way of developing web applications
Symfony4 - A new way of developing web applicationsSymfony4 - A new way of developing web applications
Symfony4 - A new way of developing web applicationsAntonio Peric-Mazar
 
Jenkins User Conference 2014
Jenkins User Conference 2014Jenkins User Conference 2014
Jenkins User Conference 2014Dan Cundiff
 
BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!
BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!
BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!Linaro
 
Wds leanengineering-141103233017-conversion-gate02
Wds leanengineering-141103233017-conversion-gate02Wds leanengineering-141103233017-conversion-gate02
Wds leanengineering-141103233017-conversion-gate02Shivam Prajapati
 
JUC Europe 2015: A Reproducible Build Environment with Jenkins
JUC Europe 2015: A Reproducible Build Environment with JenkinsJUC Europe 2015: A Reproducible Build Environment with Jenkins
JUC Europe 2015: A Reproducible Build Environment with JenkinsCloudBees
 
DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1Docker, Inc.
 
Symfony4: A new way to develop applications | Antonio Peric | CODEiD
Symfony4: A new way to develop applications | Antonio Peric | CODEiDSymfony4: A new way to develop applications | Antonio Peric | CODEiD
Symfony4: A new way to develop applications | Antonio Peric | CODEiDCODEiD PHP Community
 

Similar to Building Jenkins Pipelines at Scale (20)

Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
 
Jenkins User Conference: Building Your Continuous Delivery Toolkit
Jenkins User Conference: Building Your Continuous Delivery ToolkitJenkins User Conference: Building Your Continuous Delivery Toolkit
Jenkins User Conference: Building Your Continuous Delivery Toolkit
 
Going literate in Amadeus JUC Berlin June 25th 2014
Going literate in Amadeus JUC Berlin June 25th 2014Going literate in Amadeus JUC Berlin June 25th 2014
Going literate in Amadeus JUC Berlin June 25th 2014
 
Building your Continuous Delivery Toolkit @ JUC SF 2014
Building your Continuous Delivery Toolkit @ JUC SF 2014Building your Continuous Delivery Toolkit @ JUC SF 2014
Building your Continuous Delivery Toolkit @ JUC SF 2014
 
Lean Engineering: How to make Engineering a full Lean UX partner
Lean Engineering: How to make Engineering a full Lean UX partnerLean Engineering: How to make Engineering a full Lean UX partner
Lean Engineering: How to make Engineering a full Lean UX partner
 
Getting to push_button_deploys
Getting to push_button_deploysGetting to push_button_deploys
Getting to push_button_deploys
 
Juc paris olivier lamy talk
Juc paris olivier lamy talkJuc paris olivier lamy talk
Juc paris olivier lamy talk
 
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
JUC Europe 2015: Jenkins-Based Continuous Integration for Heterogeneous Hardw...
 
Jenkins Made Easy - Jenkins User Conference 2015 at London
Jenkins Made Easy - Jenkins User Conference 2015 at LondonJenkins Made Easy - Jenkins User Conference 2015 at London
Jenkins Made Easy - Jenkins User Conference 2015 at London
 
Configuration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL PluginConfiguration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL Plugin
 
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
 
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as codeVoxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
 
Symfony4 - A new way of developing web applications
Symfony4 - A new way of developing web applicationsSymfony4 - A new way of developing web applications
Symfony4 - A new way of developing web applications
 
Jenkins User Conference 2014
Jenkins User Conference 2014Jenkins User Conference 2014
Jenkins User Conference 2014
 
BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!
BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!
BKK16-406 Ubuntu Core - a snappy platform for Embedded, IoT and 96boards!
 
Wds leanengineering-141103233017-conversion-gate02
Wds leanengineering-141103233017-conversion-gate02Wds leanengineering-141103233017-conversion-gate02
Wds leanengineering-141103233017-conversion-gate02
 
Jenkins tutorial
Jenkins tutorialJenkins tutorial
Jenkins tutorial
 
JUC Europe 2015: A Reproducible Build Environment with Jenkins
JUC Europe 2015: A Reproducible Build Environment with JenkinsJUC Europe 2015: A Reproducible Build Environment with Jenkins
JUC Europe 2015: A Reproducible Build Environment with Jenkins
 
DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1DockerCon SF 2015: Keynote Day 1
DockerCon SF 2015: Keynote Day 1
 
Symfony4: A new way to develop applications | Antonio Peric | CODEiD
Symfony4: A new way to develop applications | Antonio Peric | CODEiDSymfony4: A new way to develop applications | Antonio Peric | CODEiD
Symfony4: A new way to develop applications | Antonio Peric | CODEiD
 

More from Julien Pivotto

What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemJulien Pivotto
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingJulien Pivotto
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?Julien Pivotto
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana LokiJulien Pivotto
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmtJulien Pivotto
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusJulien Pivotto
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusJulien Pivotto
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service DiscoveryJulien Pivotto
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionJulien Pivotto
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in GrafanaJulien Pivotto
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress ControllerJulien Pivotto
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerJulien Pivotto
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with KeycloakJulien Pivotto
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaborationJulien Pivotto
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as CodeJulien Pivotto
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusJulien Pivotto
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusJulien Pivotto
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to AnsibleJulien Pivotto
 

More from Julien Pivotto (20)

The O11y Toolkit
The O11y ToolkitThe O11y Toolkit
The O11y Toolkit
 
What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its Ecosystem
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is coming
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana Loki
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmt
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From Prometheus
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with Prometheus
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an Introduction
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in Grafana
 
YAML Magic
YAML MagicYAML Magic
YAML Magic
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress Controller
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and Alertmanager
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with Keycloak
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaboration
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as Code
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to Ansible
 

Recently uploaded

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 

Recently uploaded (20)

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 

Building Jenkins Pipelines at Scale

  • 1. . . . Jenkins User Conference Europe . #jenkinsconf . Building Pipelines at Scale Julien Pivotto inuits.eu 25th June 2014
  • 2. . . . Jenkins User Conference Europe . #jenkinsconf . .. Building Pipelines at Scale Introduction Who’s who Pipelines Puppet Why How Conclusion Plugins Why How Conclusion
  • 3. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Who’s who . .. Julien Pivotto Open-Source Consultant at inuits.eu Linux Systems Administrator FOSS Defender for many years Œ DevOps Puppet user since 2011 Doing also some Ruby & Python
  • 4. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Who’s who . .. inuits Open-Source Consultancy company 50+ people in 4 countries (.be, .ua, .nl & .cz) Doing both Development & Systems Administration A lot of domains: Linux, Web, Databases, Monitoring… Early DevOps practitioners
  • 5. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Who’s who . .. MediaMosa Drupal-based Digital Asset Management system Open-source Store assets Transcode videos Create, extract and manage metadata using open standards: Dublin Core, Qualified DC, IEEE/LOM, CZP Webservice oriented
  • 6. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Who’s who . .. MediaSalsa: MediaMosa As a Service A turn-key MediaMosa solution A few environments: Dev/Uat/Prod environments Customer-specific environments One backend per environment Multiple frontends per backend = A lot of Drupal sites
  • 7. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Definition of pipelines .. A pipeline is a chain of Jenkins jobs that are run to fetch, compile, package, run tests and deploy an application (build pipeline plugin).
  • 8. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Definition of pipelines .. A pipeline is a chain of Jenkins jobs that are run to fetch, compile, package, run tests and deploy an application (build pipeline plugin). Pipeline vs large (or independent) jobs: Separation between different tasks Overview of tests, etc… Deployment depends on testing
  • 9. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Example: a puppet pipeline
  • 10. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Inside the pipeline Checkout Style Syntax Compile Unit tests Integration tests Packaging Regression tests Deployment / Delivery …
  • 11. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Ok, let’s use pipelines! Let’s make a pipeline for our puppet code
  • 12. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Ok, let’s use pipelines! Let’s make a pipeline for our puppet code …and one for our puppet code in dev environment …and one for our puppet code in uat environment
  • 13. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Ok, let’s use pipelines! Let’s make a pipeline for our puppet code …and one for our puppet code in dev environment …and one for our puppet code in uat environment Let’s make a pipeline for backend app
  • 14. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Ok, let’s use pipelines! Let’s make a pipeline for our puppet code …and one for our puppet code in dev environment …and one for our puppet code in uat environment Let’s make a pipeline for backend app …and one for backend app in dev environment …and one for backend app in uat environment
  • 15. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Ok, let’s use pipelines! Let’s make a pipeline for our puppet code …and one for our puppet code in dev environment …and one for our puppet code in uat environment Let’s make a pipeline for backend app …and one for backend app in dev environment …and one for backend app in uat environment Let’s make 5 pipelines for frontend apps …and 5 for frontends apps in dev environment …and 5 for frontends apps in uat environment
  • 16. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. How to scale? First attempt: clone jobs in the ui Dozens of jobs to clone & edit Human intervention = mistakes Second attempt: clone jobs xml files grep & cp & sed… Crappy bash scripting is crappy Mmmh…we need something else…
  • 17. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Let’s change the pipelines now!
  • 18. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Let’s change the pipelines now! click
  • 19. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Let’s change the pipelines now! click click
  • 20. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Let’s change the pipelines now! click click click click click
  • 21. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Let’s change the pipelines now! click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click
  • 22. . . . Jenkins User Conference Europe . #jenkinsconf . Introduction/Pipelines . .. Let’s change the pipelines now! click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click click
  • 23. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet . Puppet
  • 24. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Why . .. Infrastructure as Code Puppet/Chef/Cfengine/…same fight: Modelize your infrastructure Reproducable platforms Fast and reliable Disaster recovery for ”free”
  • 25. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Why . .. What to puppetize Usually you puppetize: OS installation & configuration Apps installation & configuration DB installation & configuration
  • 26. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Why . .. What to puppetize Usually you puppetize: OS installation & configuration Apps installation & configuration DB installation & configuration But you do not automate: Application data Are Jenkins jobs to be puppetized?
  • 27. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Why . .. What to puppetize Usually you puppetize: OS installation & configuration Apps installation & configuration DB installation & configuration But you do not automate: Application data Are Jenkins jobs to be puppetized? …we tried…
  • 28. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. Modules structure Using the Jenkins upstream module And creating a specific jenkinsjobs module Difficult to share Mainly templates
  • 29. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. Structure of the module manifests job.pp (definition; file) packages.pp (packages needed by tests) dashboard.pp (augeas xml to modify jenkins config) pipeline/frontend.pp (definition; jobs) pipeline/backend.pp (definition; jobs) service.pp (exec to reload configuration)
  • 30. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. job.pp Takes a template as parameter Creates xml file and reload jenkins configuration It has a lot more arguments (project name, next job, etc…) Adds the job to the view (augeas)
  • 31. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. service.pp Reload the Jenkins service
  • 32. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. service.pp Reload the Jenkins service .. java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://127.0.0.1:8080/ reload-configuration --username "${username}" --password "${password}" It makes Jenkins unavailable
  • 33. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. pipeline.pp
  • 34. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. pipeline.pp .. Defaults for jobs . Jenkinsjobs::Job{ ensure => $ensure, git_repository => $git_repository, customer => $customer, assigned_node => $debian_slave, dashboard_view => $dashboard_view, package_name => "frontend-${customer}", vhost_docroot => $_vhost_docroot, custom_modules => 'sites/all/modules/custom', job_type => 'drupal', }
  • 35. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. pipeline.pp .. Defaults for promotions . Jenkinsjobs::Promotion{ ensure => $ensure, customer => $customer, assigned_node => $debian_slave, packaging_job => "frontend-build-${customer}", package_name => "frontend-${customer}", vhost_docroot => $_vhost_docroot, job_name => "frontend-promo-${customer}", }
  • 36. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. pipeline.pp .. Jobs definitions . jenkinsjobs::job{ "frontend-checkout-${customer}": job_template => 'jj/jobs/checkout.erb', next_job => "frontend-syntax-${customer}", start_pipeline => true, } jenkinsjobs::job{ "frontend-syntax-${customer}": job_template => 'jj/jobs/syntax.erb', next_job => "frontend-style-${customer}", }
  • 37. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. pipeline.pp .. Job with promotions . jenkinsjobs::job{ "frontend-promo-${customer}": job_template => 'jj/jobs/promote.erb', promotions => [ "deploy-${customer}-front-to-uat", "deploy-${customer}-front-to-prod", "deploy-${customer}-front-to-com-prod", ], }
  • 38. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. pipeline.pp .. Promotions . if 'uat' in $targets { jenkinsjobs::promotion { "deploy-${customer}-front-to-uat": template => 'jj/promotion/uat.erb', debian_repo => 'mediamosa-uat', targets => $targets['viaa-uat'], } }
  • 39. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/How . .. dashboard.pp .. Augeas example . augeas { "dashboard view $title": lens => 'Xml.lns', incl => '/var/lib/jenkins/config.xml', context => '/files/var/lib/jenkins/config.xml', changes => [ "set ${augeas_prefix}[last()+1]/owner/#attribute/class "hudson"", "set ${augeas_prefix}[last()]/owner/#attribute/reference "../../.."", "set ${augeas_prefix}[last()]/includeStdJobList/#text "true"", "set ${augeas_prefix}[last()]/name/#text "${title}"", ], onlyif => "match ${file_prefix}/hudson/views/*/name/#text[.="${title}"] size == 0", notify => Exec['reload-jenkins'], }
  • 40. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Advantages of setting pipelines in Puppet Easy to deploy new pipelines
  • 41. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Advantages of setting pipelines in Puppet Easy to deploy new pipelines Deploy pipelines in the same time as applications (exported resources) Define pipelines at the same place as applications (puppet)
  • 42. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Advantages of setting pipelines in Puppet Easy to deploy new pipelines Deploy pipelines in the same time as applications (exported resources) Define pipelines at the same place as applications (puppet) Track history of pipeline changes
  • 43. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Advantages of setting pipelines in Puppet Easy to deploy new pipelines Deploy pipelines in the same time as applications (exported resources) Define pipelines at the same place as applications (puppet) Track history of pipeline changes Having separate jobs for each project Reuse puppet template functionality
  • 44. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Advantages of setting pipelines in Puppet Easy to deploy new pipelines Deploy pipelines in the same time as applications (exported resources) Define pipelines at the same place as applications (puppet) Track history of pipeline changes Having separate jobs for each project Reuse puppet template functionality Deploy new Jenkins server in minutes with all jobs Keep several Jenkins (test, prod) in sync
  • 45. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Advantages of setting pipelines in Puppet Easy to deploy new pipelines Deploy pipelines in the same time as applications (exported resources) Define pipelines at the same place as applications (puppet) Track history of pipeline changes Having separate jobs for each project Reuse puppet template functionality Deploy new Jenkins server in minutes with all jobs Keep several Jenkins (test, prod) in sync Add ssh keys, git config, etc…in Puppet too Create test databases & vhosts in Puppet (exported resources)
  • 46. . . . Jenkins User Conference Europe . #jenkinsconf . Puppet/Conclusion . .. Disadvantages Play with Augeas & xml (wrong feeling) Makes Jenkins unavailable on changes Every small change ends up in Puppet
  • 47. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins . Plugins
  • 48. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/Why . .. A lighter approach: Jenkins plugins Remove the Puppet complexity Still having Pipelines in sync Minimize human intervention Speed-up the pipelines Do not restart Jenkins each time
  • 49. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Plugin #1: Build flow Creates Pipelines Uses Groovy scripts Can run jobs in parallel Several other plugins do the same
  • 50. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How .
  • 51. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts .. Pipelines . build ( "syntax" ) build ( "lint" ) build ( "rspec" ) build ( "doc" ) build ( "package" ) build ( "release" )
  • 52. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts .. Parallel jobs . parallel ( { build ( "syntax" ) }, { build ( "lint" ) }, { build ( "rspec" ) }, )
  • 53. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts
  • 54. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts .. Conditionals . if ( params["RELEASE"] == "true" ) { switch ( params["DEPLOY_METHOD"] ) { case "librarian": build ( "librarian" ) case "r10k": build ( "r10k" ) case "package": build ( "package" ) } }
  • 55. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts
  • 56. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts .. Build parameters . build ( "gitsubmodules", NAME: params["NAME"], ENVIRONMENT: params["ENVIRONMENT"] )
  • 57. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow: Groovy scripts
  • 58. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. But also… A ”retry” function to try the failing jobs 2, 3, 4 time A ”rescue” function to launch a jobs if another fails The first job fails if one of the pipeline jobs fails! And a lot of other stuffs
  • 59. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Plugin #2: Job Generator Jenkins jobs generator Creates jobs on the fly Jobs do not need to be created at the start of the (flow) pipeline Also updates existing jobs Allows to keep jobs per project (per project history and graphes) Takes special parameters
  • 60. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Build Flow Plugin + Job generator One starting job (orchestrator) Calls some jobs or some generators, in parallel Ends with a nice, up-to-date Pipeline
  • 61. . . . Jenkins User Conference Europe . #jenkinsconf . Plugins/How . .. Plugin #3: JobConfigHistory Plugin Keeps track of the changes in the jobs Alternative to keep the xml in git
  • 62. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . Conclusion
  • 63. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server
  • 64. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server: Think slaves
  • 65. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server: Think slaves SCM pulling
  • 66. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server: Think slaves SCM pulling: Think Gerrit or Trigger
  • 67. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server: Think slaves SCM pulling: Think Gerrit or Trigger Jobs are slow
  • 68. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server: Think slaves SCM pulling: Think Gerrit or Trigger Jobs are slow: Optimize, Divide them, Monitor them (graphite) Notifications
  • 69. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Other bottlenecks/problems at scale Load of the Jenkins server: Think slaves SCM pulling: Think Gerrit or Trigger Jobs are slow: Optimize, Divide them, Monitor them (graphite) Notifications: Think XMPP, IRC, mails, Gerrit…
  • 70. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Pipelines at scale… Two different approaches application-level infrastructure-level Pick the one you prefer (or invent your own) Do not hesitate to separate Jobs Monitor your jobs/pipelines (graphite)
  • 71. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . Thank you! Thanks to my colleague @tomdevylder for the Build Flow slides
  • 72. . . . Jenkins User Conference Europe . #jenkinsconf . Conclusion . .. Contact Julien Pivotto julien@inuits.eu @roidelapluie Inuits BVBA Belgium +32 473 441 636 https://inuits.eu
  • 73. Jenkins User Conference Europe #jenkinsconf Corporate Community Thank You To Our Sponsors Platinum Gold Silver . . . Jenkins User Conference Europe . #jenkinsconf . #jenkinsconf