Groovy there's a docker in my application pipeline

Kris Buytaert
Kris BuytaertDevops, Linux and Open Source Expert at Inuits
Groovy, there is a docker in
my application pipeline
Kris Buytaert
@krisbuytaert
Kris BuytaertKris Buytaert
● I used to be a Dev,I used to be a Dev,
● Then Became an OpThen Became an Op
● Chief Trolling Officer and Open SourceChief Trolling Officer and Open Source
Consultant @Consultant @inuits.euinuits.eu
● Everything is an effing DNS ProblemEverything is an effing DNS Problem
● Building Clouds since before the bookstoreBuilding Clouds since before the bookstore
● Some books, some papers, some blogsSome books, some papers, some blogs
● Evangelizing devopsEvangelizing devops
● Organiser of #devopsdays, #cfgmgmtcamp,Organiser of #devopsdays, #cfgmgmtcamp,
#loadays, ….#loadays, ….
● Part of the travelling geek circusPart of the travelling geek circus
What's this devopsWhat's this devops
thing anyhow ?thing anyhow ?
C(L)AMSC(L)AMS
● CultureCulture
● (Lean)(Lean)
● AutomationAutomation
● MeasurementMeasurement
● SharingSharing
Damon Edwards and John WillisDamon Edwards and John Willis
Gene KimGene Kim
NirvanaNirvana
An “ecosystem” that supports continuous delivery, fromAn “ecosystem” that supports continuous delivery, from
infrastructure, data and configuration management toinfrastructure, data and configuration management to
business.business.
Through automation of the build, deployment, and testingThrough automation of the build, deployment, and testing
process, and improved collaboration between developers,process, and improved collaboration between developers,
testers, and operations, delivery teams can get changestesters, and operations, delivery teams can get changes
released in a matter of hours — sometimes even minutes–noreleased in a matter of hours — sometimes even minutes–no
matter what the size of a project or the complexity of its codematter what the size of a project or the complexity of its code
base.base.
Continuous Delivery , Jez HumbleContinuous Delivery , Jez Humble
This talk:This talk:
Journey / Early steps of a team that is used toJourney / Early steps of a team that is used to
infrastructure as codeinfrastructure as code
Adopting containers step by step.Adopting containers step by step.
Build PipelinesBuild Pipelines
Jenkins PipelineJenkins Pipeline
" Our job as engineers (and ops, dev-ops, QA," Our job as engineers (and ops, dev-ops, QA,
support, everyone in the company actually) is tosupport, everyone in the company actually) is to
enable the business goals. We strongly feel thatenable the business goals. We strongly feel that
in order to do that you must havein order to do that you must have the ability tothe ability to
deploy code quickly and safelydeploy code quickly and safely. Even if the. Even if the
business goals are to deploy strongly QA’d codebusiness goals are to deploy strongly QA’d code
once a month at 3am (it’s not for us, we push allonce a month at 3am (it’s not for us, we push all
the time), having a reliable and easythe time), having a reliable and easy
deployment should bedeployment should be non-negotiablenon-negotiable."."
Etsy Blog upon releasing DeployinatorEtsy Blog upon releasing Deployinator
http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/
We need :We need :
AnAn unmodifiedunmodified artifact from build to deploy.artifact from build to deploy.
SameSame artifact on dev, staging, acceptance,artifact on dev, staging, acceptance,
production, shadow, dr …production, shadow, dr …
Why ops like to packageWhy ops like to package
● Packages give you featuresPackages give you features
•Consistency, security, dependenciesConsistency, security, dependencies
● Uniquely identify where files come fromUniquely identify where files come from
•Package or cfg-mgmtPackage or cfg-mgmt
● Source repo not always availableSource repo not always available
•Firewall / Cloud etc ..Firewall / Cloud etc ..
● Weird deployment locations , no easy accessWeird deployment locations , no easy access
● Little overhead when you automateLittle overhead when you automate
● CONFIG does not belong in a packageCONFIG does not belong in a package
Example app for today :Example app for today :
DashingDashing
Dashing is DeadDashing is Dead
● No it has been forkedNo it has been forked
● https://github.com/dashing-io/dashinghttps://github.com/dashing-io/dashing
● s/dashing/smashing/g;s/dashing/smashing/g;
Dashing {su/ro}cksDashing {su/ro}cks
The GoodThe Good
● Lots of existingLots of existing
widgetswidgets
● Easy to startEasy to start
● Simple rubySimple ruby
● Eventstream forEventstream for
debuggingdebugging
The UglyThe Ugly
● Ruby Gem hellRuby Gem hell
● Widget DeploymentWidget Deployment
from a Gist ?from a Gist ?
● No config separationNo config separation
Deploying DashingDeploying Dashing
● gem install dashinggem install dashing
● gem install is the new maven downloading thegem install is the new maven downloading the
internetinternet
● Reproducable ?Reproducable ?
A typical deploymentA typical deployment
● P all software is packagedP all software is packaged
•
CentOS mostlyCentOS mostly
•
RPM generated with fpmRPM generated with fpm
•
Build in Jenkins, uploaded to pulpBuild in Jenkins, uploaded to pulp
● C config is managed by PuppetC config is managed by Puppet
● S service is managed by PuppetS service is managed by Puppet
Building Ruby/python/nodeBuilding Ruby/python/node
● We need a chrootWe need a chroot
● With the right ruby/python versionWith the right ruby/python version
● With the right dependenciesWith the right dependencies
● IsolatedIsolated
● Ruby => rvmRuby => rvm
● Ruby 2.1 (dashing is pretty picky aboutRuby 2.1 (dashing is pretty picky about
versions)versions)
● What about we try this in a container ?What about we try this in a container ?
Pipelines ?Pipelines ?
● One to build basic dashingOne to build basic dashing
● One to build and deploy the dashboards, scriptsOne to build and deploy the dashboards, scripts
and all other dashing related stufand all other dashing related stuf
•
No hacking In production,No hacking In production,
•
Dashboards are production viewsDashboards are production views
•
Dev → prod promotionsDev → prod promotions
JenkinsJenkins
● Starting point :Starting point :
•
Dev jenkinsDev jenkins
•
1 master (no running jobs)1 master (no running jobs)
•
Multiple slavesMultiple slaves
● Production : diferent jenkins stack with similarProduction : diferent jenkins stack with similar
pipelinespipelines
● We need to be able to reproduce a pipelineWe need to be able to reproduce a pipeline
Building a dashingBuilding a dashing
container step 0container step 0
● Empty / standard distro containerEmpty / standard distro container
updatesupdates
add fpmadd fpm
epel and build dependenciesepel and build dependencies
● Triggering docker from the cli, no plugin inTriggering docker from the cli, no plugin in
Jenkins used (coz Bugz)Jenkins used (coz Bugz)
● $customer environment requires http_proxy$customer environment requires http_proxy
Puppet & DockerPuppet & Docker
● https://github.com/garethr/garethr-dockerhttps://github.com/garethr/garethr-docker
Building a dashingBuilding a dashing
container step 1container step 1
● Read rvm installation docsRead rvm installation docs
● frownfrown
● Frown againFrown again
● Containers => YoloContainers => Yolo
● fpm the whole treefpm the whole tree
Building a dashingBuilding a dashing
container step 2container step 2
● Take rvm containerTake rvm container
● rvm install ruby-2.1rvm install ruby-2.1
● fpm -s dir -t rpm -n rvm-ruby -v 2.1.8fpm -s dir -t rpm -n rvm-ruby -v 2.1.8
/usr/local/rvm/rubies/ruby-2.1.8/usr/local/rvm/rubies/ruby-2.1.8
Building a dashingBuilding a dashing
container step 3container step 3
● Take ruby-2.1 containerTake ruby-2.1 container
● rvm use 2.1rvm use 2.1
● gem install bundlegem install bundle
● gem install dashing (fills /usr/local/rvm/gems/ruby-gem install dashing (fills /usr/local/rvm/gems/ruby-
2.1.8 with gems2.1.8 with gems
● mkdir -p /opt/dashing/ && dashing new dashboardmkdir -p /opt/dashing/ && dashing new dashboard
● cd /opt/dashing/dashboardcd /opt/dashing/dashboard
● bundle installbundle install
● Now we have a “reproducable” container whichNow we have a “reproducable” container which
will show an empty default dashboard uponwill show an empty default dashboard upon
launchinglaunching
● We also have an artifact which we can redeployWe also have an artifact which we can redeploy
● We killed most of those layers afterwardsWe killed most of those layers afterwards
Deploying DashboardDeploying Dashboard
widgetswidgets
dashing installdashing install
GIST_IDGIST_ID
A dashboardA dashboard
● git repo withgit repo with
•
Dashboards (html/erb)Dashboards (html/erb)
•
JobsJobs
•
Mostly with datasources hardcoded inMostly with datasources hardcoded in
scriptsscripts
•
Not multitenantNot multitenant
•
WidgetsWidgets
● Pipeline to deploy and test thatPipeline to deploy and test that
Deploying theDeploying the
dashboardsdashboards
● From dashing containerFrom dashing container
● Cleanup default dashboards (twitter example)Cleanup default dashboards (twitter example)
● Bundle installBundle install
•
ruby scripts have dependenciesruby scripts have dependencies
● Package dependenciesPackage dependencies
•
actually whole /usr/local/rvmactually whole /usr/local/rvm
● Package dashboardPackage dashboard
Testing the dashboardsTesting the dashboards
● Not all deploys were workingNot all deploys were working
● New job, required gems are missingNew job, required gems are missing
● TestingTesting
•
Build container with most recent dashboardBuild container with most recent dashboard
•
Based on the rpm'sBased on the rpm's
•
docker run -p 0.0.0.0:3030:3030 -ddocker run -p 0.0.0.0:3030:3030 -d
dashing/dashboardsdashing/dashboards
•
wget http://localhost:3030/wget http://localhost:3030/
Deploying theDeploying the
dashboardsdashboards
● Deploy 2 rpms on vm's via mcollectiveDeploy 2 rpms on vm's via mcollective
•
dashing-gemsdashing-gems
•
dashing-dashboarddashing-dashboard
on nodes with profile_dashingon nodes with profile_dashing
● mco package update dashing-gems -Fmco package update dashing-gems -F
environment=svc1prd -C profile_dashingenvironment=svc1prd -C profile_dashing
We need a local dockerWe need a local docker
images repositoryimages repository
● Distributed Jenkins (master + multiple slaves)Distributed Jenkins (master + multiple slaves)
● An image build on node X is not available onAn image build on node X is not available on
node Ynode Y
● Tests run on other nodeTests run on other node
docker push dashing/dashingdocker push dashing/dashing
docker push dashing/dashboardsdocker push dashing/dashboards
We need a local dockerWe need a local docker
images repositoryimages repository
● Pulp ?Pulp ?
•
Read only (August 2016)Read only (August 2016)
•
Good for mirrorsGood for mirrors
● Nexus / ArtifactoryNexus / Artifactory
● Docker registry (obsolete, used to be only in aDocker registry (obsolete, used to be only in a
container)container)
● Docker-distribution : packages availableDocker-distribution : packages available
Docker IncompatibilitiesDocker Incompatibilities
● Search path for imagesSearch path for images
•
Local firstLocal first
•
Upstream afterwardsUpstream afterwards
Docker Inc says NODocker Inc says NO
Redhat says YesRedhat says Yes
● --build-args -e--build-args -e
•
Redhat vs Docker implementation diferRedhat vs Docker implementation difer
Problems solvedProblems solved
● Chrooted package build, no complex mockChrooted package build, no complex mock
setups or specfilessetups or specfiles
● Internal docker repo allows reuse of buildInternal docker repo allows reuse of build
images on other nodesimages on other nodes
● Jenkins and docker “integration”Jenkins and docker “integration”
Rinse & RepeatRinse & Repeat
● Similar patterns forSimilar patterns for
•
Python , php, etc.Python , php, etc.
● Test can now run in containers with the correctTest can now run in containers with the correct
versionversion
● Tests can be run with multiple versions of php/Tests can be run with multiple versions of php/
phython/ruby etc..phython/ruby etc..
Can you Automate yourCan you Automate your
Pipeline Creation ?Pipeline Creation ?
● Pipeline as CodePipeline as Code
● Jenkins Job DSLJenkins Job DSL
● Pipeline PluginPipeline Plugin
Building the PipelineBuilding the Pipeline
● Dev environment for JenkinsDev environment for Jenkins
•
Fully puppetizedFully puppetized
● JobsJobs
•
Jenkins Job DSL PluginJenkins Job DSL Plugin
•
https://wiki.jenkins-ci.org/display/JENKINS/Johttps://wiki.jenkins-ci.org/display/JENKINS/Jo
b+DSL+Pluginb+DSL+Plugin
•
SeedjobSeedjob
● GroovyGroovy
● GitGit
● Rebuild jobs onRebuild jobs on
commitcommit
● Keep numbersKeep numbers
● Projects in foldersProjects in folders
A dsl projectA dsl project
def foldername = 'project-x'def foldername = 'project-x'
folder(“${foldername}”)folder(“${foldername}”)
job(“${foldername}/XYZ”) {}job(“${foldername}/XYZ”) {}
job(“${foldername}/ABC”) {}job(“${foldername}/ABC”) {}
buildPipelineView(“${foldername}/pipeline”)buildPipelineView(“${foldername}/pipeline”)
{ selectedJob(“${foldername}/XYZ”) }{ selectedJob(“${foldername}/XYZ”) }
dashing dsl projectdashing dsl project
job("${foldername}/dashing-dashboard-build")job("${foldername}/dashing-dashboard-build")
job("${foldername}/dashing-dashboard-test")job("${foldername}/dashing-dashboard-test")
job("${foldername}/dashing-upload2repo")job("${foldername}/dashing-upload2repo")
job("${foldername}/dashing-dashboard-deploy")job("${foldername}/dashing-dashboard-deploy")
job("${foldername}/dashing-dashboard-deploy-prd")job("${foldername}/dashing-dashboard-deploy-prd")
job("${foldername}/dashing-build")job("${foldername}/dashing-build")
Job partsJob parts
● Logrotator : how long to keep buildsLogrotator : how long to keep builds
● Scm : git configScm : git config
● Trigger : when to buildTrigger : when to build
● Label : where to runLabel : where to run
● Steps : shell(readFileFromWorkspace('file.sh'))Steps : shell(readFileFromWorkspace('file.sh'))
● publisherspublishers
Publisher PartsPublisher Parts
● PublishBuildPublishBuild
● CloneWorkspacePublisherCloneWorkspacePublisher
● ArchiveArtifactsArchiveArtifacts
● Downstreamparametrized …Downstreamparametrized …
Pipeline Problems solvedPipeline Problems solved
● No more promoted build pluginNo more promoted build plugin
•
Manual promote in pipelineManual promote in pipeline
•
Easy visabilityEasy visability
● No more clicking around to create / editNo more clicking around to create / edit
pipelinepipeline
● One job per task, no reuse of jobs with diferentOne job per task, no reuse of jobs with diferent
parametersparameters
● Centrally managed jobs (git)Centrally managed jobs (git)
Solved problems bySolved problems by
ContainersContainers
● Multiversion test of application stacksMultiversion test of application stacks
•
Eg diferent puppet/ php versionsEg diferent puppet/ php versions
● Both functional and unit testing in the pipelineBoth functional and unit testing in the pipeline
● Non blocking pipeline branches for futureNon blocking pipeline branches for future
versionsversions
● Provide developers with producton alikeProvide developers with producton alike
containerscontainers
● Growing container experience with ops folksGrowing container experience with ops folks
ContactContact
Kris BuytaertKris Buytaert Kris.Buytaert@inuits.beKris.Buytaert@inuits.be
Further ReadingFurther Reading
@krisbuytaert@krisbuytaert
http://www.krisbuytaert.be/blog/http://www.krisbuytaert.be/blog/
http://www.inuits.be/http://www.inuits.be/
InuitsInuits
Essensteenweg 31Essensteenweg 31
BrasschaatBrasschaat
BelgiumBelgium
891.514.231891.514.231
+32 475 961221+32 475 961221
1 of 45

Recommended

Closing the gap between Distros(devs) and their Users(ops) by
Closing the gap between Distros(devs) and their Users(ops)Closing the gap between Distros(devs) and their Users(ops)
Closing the gap between Distros(devs) and their Users(ops)Kris Buytaert
15.9K views34 slides
Devops is not about Tooling by
Devops is not about ToolingDevops is not about Tooling
Devops is not about ToolingKris Buytaert
1.2K views109 slides
From devoops to devops by
From devoops to devopsFrom devoops to devops
From devoops to devopsKris Buytaert
827 views48 slides
Continous Delivery of your Infrastructure by
Continous Delivery of your InfrastructureContinous Delivery of your Infrastructure
Continous Delivery of your InfrastructureKris Buytaert
857 views50 slides
From MonitoringSucks to Monitoring Love , 2016 Edition by
From MonitoringSucks to Monitoring Love , 2016 EditionFrom MonitoringSucks to Monitoring Love , 2016 Edition
From MonitoringSucks to Monitoring Love , 2016 EditionKris Buytaert
29.4K views51 slides
Run stuff, Deploy Stuff by
Run stuff, Deploy StuffRun stuff, Deploy Stuff
Run stuff, Deploy StuffKris Buytaert
1K views50 slides

More Related Content

What's hot

Dod is not done by
Dod is not doneDod is not done
Dod is not doneKris Buytaert
21.9K views20 slides
On the Importance of Infrastructure as Code by
On the Importance of Infrastructure as CodeOn the Importance of Infrastructure as Code
On the Importance of Infrastructure as CodeKris Buytaert
1.8K views37 slides
devops is a reorg by
devops is a reorgdevops is a reorg
devops is a reorgKris Buytaert
2.1K views34 slides
Adopting Devops , Stories from the trenches by
Adopting Devops , Stories from the trenchesAdopting Devops , Stories from the trenches
Adopting Devops , Stories from the trenchesKris Buytaert
1.9K views48 slides
Devops is dead, Long Live Devops by
Devops is dead, Long Live DevopsDevops is dead, Long Live Devops
Devops is dead, Long Live DevopsKris Buytaert
1.7K views27 slides
Run stuff, Deploy Stuff, Jax London 2017 Edition by
Run stuff, Deploy Stuff, Jax London 2017 EditionRun stuff, Deploy Stuff, Jax London 2017 Edition
Run stuff, Deploy Stuff, Jax London 2017 EditionKris Buytaert
2.2K views46 slides

What's hot(20)

On the Importance of Infrastructure as Code by Kris Buytaert
On the Importance of Infrastructure as CodeOn the Importance of Infrastructure as Code
On the Importance of Infrastructure as Code
Kris Buytaert1.8K views
Adopting Devops , Stories from the trenches by Kris Buytaert
Adopting Devops , Stories from the trenchesAdopting Devops , Stories from the trenches
Adopting Devops , Stories from the trenches
Kris Buytaert1.9K views
Devops is dead, Long Live Devops by Kris Buytaert
Devops is dead, Long Live DevopsDevops is dead, Long Live Devops
Devops is dead, Long Live Devops
Kris Buytaert1.7K views
Run stuff, Deploy Stuff, Jax London 2017 Edition by Kris Buytaert
Run stuff, Deploy Stuff, Jax London 2017 EditionRun stuff, Deploy Stuff, Jax London 2017 Edition
Run stuff, Deploy Stuff, Jax London 2017 Edition
Kris Buytaert2.2K views
Dev secops opsec, devsec, devops ? by Kris Buytaert
Dev secops opsec, devsec, devops ?Dev secops opsec, devsec, devops ?
Dev secops opsec, devsec, devops ?
Kris Buytaert17.4K views
Moby is killing your devops efforts by Kris Buytaert
Moby is killing your devops effortsMoby is killing your devops efforts
Moby is killing your devops efforts
Kris Buytaert2.7K views
Is there a future for devops ? by Kris Buytaert
Is there a future for devops ?Is there a future for devops ?
Is there a future for devops ?
Kris Buytaert3.5K views
No, we can't do continuous delivery by Kris Buytaert
No, we can't do continuous deliveryNo, we can't do continuous delivery
No, we can't do continuous delivery
Kris Buytaert1.8K views
Devops is a Security Requirement by Kris Buytaert
Devops is a Security RequirementDevops is a Security Requirement
Devops is a Security Requirement
Kris Buytaert699 views
The Return of the Dull Stack Engineer by Kris Buytaert
The Return of the Dull Stack EngineerThe Return of the Dull Stack Engineer
The Return of the Dull Stack Engineer
Kris Buytaert2.4K views
Devops 101 QA with Kris Buytaert by Kris Buytaert
Devops 101 QA  with Kris BuytaertDevops 101 QA  with Kris Buytaert
Devops 101 QA with Kris Buytaert
Kris Buytaert2.9K views
Monitoring Drupal In an Infrastructure as Code Age by Kris Buytaert
Monitoring Drupal In an Infrastructure as Code AgeMonitoring Drupal In an Infrastructure as Code Age
Monitoring Drupal In an Infrastructure as Code Age
Kris Buytaert10.6K views
Docker is killing your #devops Efforts by Kris Buytaert
Docker is killing your #devops EffortsDocker is killing your #devops Efforts
Docker is killing your #devops Efforts
Kris Buytaert2.6K views
The influence of "Distributed platforms" on #devops by Kris Buytaert
The influence of "Distributed platforms" on #devopsThe influence of "Distributed platforms" on #devops
The influence of "Distributed platforms" on #devops
Kris Buytaert1.3K views
Another 7 tools for your #devops stack by Kris Buytaert
Another 7 tools for your #devops stackAnother 7 tools for your #devops stack
Another 7 tools for your #devops stack
Kris Buytaert1.6K views
Automating MySQL operations with Puppet by Kris Buytaert
Automating MySQL operations with PuppetAutomating MySQL operations with Puppet
Automating MySQL operations with Puppet
Kris Buytaert1.8K views

Viewers also liked

Support and Initiate a DevOps Transformation by
Support and Initiate a DevOps TransformationSupport and Initiate a DevOps Transformation
Support and Initiate a DevOps Transformationdev2ops
143.7K views73 slides
Looking back at 7 years of #devopsdays by
Looking back at 7 years of #devopsdaysLooking back at 7 years of #devopsdays
Looking back at 7 years of #devopsdaysKris Buytaert
932 views22 slides
Looking back at 6.5 years of #devopsdays by
Looking back at 6.5 years of #devopsdaysLooking back at 6.5 years of #devopsdays
Looking back at 6.5 years of #devopsdaysKris Buytaert
1.2K views20 slides
Técnicas de gestión del tiempo para Administradores de Sistemas by
Técnicas de gestión del tiempo para Administradores de SistemasTécnicas de gestión del tiempo para Administradores de Sistemas
Técnicas de gestión del tiempo para Administradores de SistemasCAPSiDE
2.2K views58 slides
DevOps Transformations by
DevOps TransformationsDevOps Transformations
DevOps TransformationsErnest Mueller
5.1K views29 slides
Why to docker by
Why to dockerWhy to docker
Why to dockerKarthik Gaekwad
14.9K views29 slides

Viewers also liked(17)

Support and Initiate a DevOps Transformation by dev2ops
Support and Initiate a DevOps TransformationSupport and Initiate a DevOps Transformation
Support and Initiate a DevOps Transformation
dev2ops143.7K views
Looking back at 7 years of #devopsdays by Kris Buytaert
Looking back at 7 years of #devopsdaysLooking back at 7 years of #devopsdays
Looking back at 7 years of #devopsdays
Kris Buytaert932 views
Looking back at 6.5 years of #devopsdays by Kris Buytaert
Looking back at 6.5 years of #devopsdaysLooking back at 6.5 years of #devopsdays
Looking back at 6.5 years of #devopsdays
Kris Buytaert1.2K views
Técnicas de gestión del tiempo para Administradores de Sistemas by CAPSiDE
Técnicas de gestión del tiempo para Administradores de SistemasTécnicas de gestión del tiempo para Administradores de Sistemas
Técnicas de gestión del tiempo para Administradores de Sistemas
CAPSiDE2.2K views
Shirt Ops: How to make awesome t-shirts for your conference by James Wickett
Shirt Ops: How to make awesome t-shirts for your conferenceShirt Ops: How to make awesome t-shirts for your conference
Shirt Ops: How to make awesome t-shirts for your conference
James Wickett11.2K views
Pragmatic Security and Rugged DevOps - SXSW 2015 by James Wickett
Pragmatic Security and Rugged DevOps - SXSW 2015Pragmatic Security and Rugged DevOps - SXSW 2015
Pragmatic Security and Rugged DevOps - SXSW 2015
James Wickett14.8K views
Application Security Epistemology in a Continuous Delivery World by James Wickett
Application Security Epistemology in a Continuous Delivery WorldApplication Security Epistemology in a Continuous Delivery World
Application Security Epistemology in a Continuous Delivery World
James Wickett4.9K views
Юлия Викторова; Александр Тарасов. DevOps без булшита. by ScrumTrek
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.
ScrumTrek936 views
Build Your Agile Testing Skill Set by lisacrispin
Build Your Agile Testing Skill SetBuild Your Agile Testing Skill Set
Build Your Agile Testing Skill Set
lisacrispin2.2K views
Agile Requirements Exploration: How Testers Add Value by lisacrispin
Agile Requirements Exploration: How Testers Add ValueAgile Requirements Exploration: How Testers Add Value
Agile Requirements Exploration: How Testers Add Value
lisacrispin1.7K views
Containers - (Austin Cloud Meetup April 2016) by Derrick Wippler
Containers - (Austin Cloud Meetup April 2016)Containers - (Austin Cloud Meetup April 2016)
Containers - (Austin Cloud Meetup April 2016)
Derrick Wippler16.2K views
Fluentd - Flexible, Stable, Scalable by Shu Ting Tseng
Fluentd - Flexible, Stable, ScalableFluentd - Flexible, Stable, Scalable
Fluentd - Flexible, Stable, Scalable
Shu Ting Tseng14.2K views
Los nuevos desafíos del testing by TestingBaires
Los nuevos desafíos del testingLos nuevos desafíos del testing
Los nuevos desafíos del testing
TestingBaires642 views
RSA Conference 2016: Who Are You? From Meat to Electrons and Back Again by Mike Schwartz
RSA Conference 2016: Who Are You? From Meat to Electrons and Back AgainRSA Conference 2016: Who Are You? From Meat to Electrons and Back Again
RSA Conference 2016: Who Are You? From Meat to Electrons and Back Again
Mike Schwartz16.6K views

Similar to Groovy there's a docker in my application pipeline

Continuous Delivery of (y)our infrastructure. by
Continuous Delivery of (y)our infrastructure.Continuous Delivery of (y)our infrastructure.
Continuous Delivery of (y)our infrastructure.Kris Buytaert
3K views45 slides
Pipeline as code for your infrastructure as Code by
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodeKris Buytaert
1.9K views59 slides
From Config Management Sucks to #cfgmgmtlove by
From Config Management Sucks to #cfgmgmtlove From Config Management Sucks to #cfgmgmtlove
From Config Management Sucks to #cfgmgmtlove Kris Buytaert
2K views42 slides
Repositories as Code by
Repositories as CodeRepositories as Code
Repositories as CodeKris Buytaert
642 views34 slides
Icinga Camp Amsterdam - Infrastructure as Code by
Icinga Camp Amsterdam - Infrastructure as CodeIcinga Camp Amsterdam - Infrastructure as Code
Icinga Camp Amsterdam - Infrastructure as CodeIcinga
3.3K views37 slides
Deploying your SaaS stack OnPrem by
Deploying your SaaS stack OnPremDeploying your SaaS stack OnPrem
Deploying your SaaS stack OnPremKris Buytaert
681 views38 slides

Similar to Groovy there's a docker in my application pipeline(20)

Continuous Delivery of (y)our infrastructure. by Kris Buytaert
Continuous Delivery of (y)our infrastructure.Continuous Delivery of (y)our infrastructure.
Continuous Delivery of (y)our infrastructure.
Kris Buytaert3K views
Pipeline as code for your infrastructure as Code by Kris Buytaert
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
Kris Buytaert1.9K views
From Config Management Sucks to #cfgmgmtlove by Kris Buytaert
From Config Management Sucks to #cfgmgmtlove From Config Management Sucks to #cfgmgmtlove
From Config Management Sucks to #cfgmgmtlove
Kris Buytaert2K views
Icinga Camp Amsterdam - Infrastructure as Code by Icinga
Icinga Camp Amsterdam - Infrastructure as CodeIcinga Camp Amsterdam - Infrastructure as Code
Icinga Camp Amsterdam - Infrastructure as Code
Icinga3.3K views
Deploying your SaaS stack OnPrem by Kris Buytaert
Deploying your SaaS stack OnPremDeploying your SaaS stack OnPrem
Deploying your SaaS stack OnPrem
Kris Buytaert681 views
Continuous Infrastructure First by Kris Buytaert
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
Kris Buytaert521 views
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove by NETWAYS
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLoveOSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
NETWAYS204 views
Continuous Infrastructure First Ignite Edition by Kris Buytaert
Continuous Infrastructure First  Ignite EditionContinuous Infrastructure First  Ignite Edition
Continuous Infrastructure First Ignite Edition
Kris Buytaert476 views
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert by Mykola Marzhan
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaertDevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
Mykola Marzhan24 views
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire by dotCloud
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
dotCloud3.1K views
Deploying software at Scale by Kris Buytaert
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
Kris Buytaert2.5K views
OSDC 2016 - Another 7 Tools for your #devops Stack by Kris Buytaert by NETWAYS
OSDC 2016 - Another 7 Tools for your #devops Stack by Kris BuytaertOSDC 2016 - Another 7 Tools for your #devops Stack by Kris Buytaert
OSDC 2016 - Another 7 Tools for your #devops Stack by Kris Buytaert
NETWAYS81 views
A Gentle Introduction to Docker and Containers by Docker, Inc.
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
Docker, Inc.1.6K views
OSDC 2012 | Devops and Open Source by Kris Buytaert by NETWAYS
OSDC 2012 | Devops and Open Source by Kris BuytaertOSDC 2012 | Devops and Open Source by Kris Buytaert
OSDC 2012 | Devops and Open Source by Kris Buytaert
NETWAYS23 views
OSDC 2012 | Devops and Open Source by Kris Buyaert by NETWAYS
OSDC 2012 | Devops and Open Source by Kris BuyaertOSDC 2012 | Devops and Open Source by Kris Buyaert
OSDC 2012 | Devops and Open Source by Kris Buyaert
NETWAYS18 views
Django dev-env-my-way by Robert Lujo
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
Robert Lujo941 views
When traditional configuration management is to slow for your needs by Kris Buytaert
When traditional configuration management is to slow for your needsWhen traditional configuration management is to slow for your needs
When traditional configuration management is to slow for your needs
Kris Buytaert1.4K views

More from Kris Buytaert

Years of (not) learning , from devops to devoops by
Years of (not) learning , from devops to devoopsYears of (not) learning , from devops to devoops
Years of (not) learning , from devops to devoopsKris Buytaert
65 views44 slides
Observability will not fix your Broken Monitoring ,Ignite by
Observability will not fix your Broken Monitoring ,IgniteObservability will not fix your Broken Monitoring ,Ignite
Observability will not fix your Broken Monitoring ,IgniteKris Buytaert
167 views20 slides
Infrastructure as Code Patterns by
Infrastructure as Code PatternsInfrastructure as Code Patterns
Infrastructure as Code PatternsKris Buytaert
117 views53 slides
From devoops to devops 13 years of (not) learning by
From devoops to devops 13 years of (not) learningFrom devoops to devops 13 years of (not) learning
From devoops to devops 13 years of (not) learningKris Buytaert
185 views40 slides
Pipeline all the Dashboards as Code by
Pipeline all the Dashboards as CodePipeline all the Dashboards as Code
Pipeline all the Dashboards as CodeKris Buytaert
644 views20 slides
Help , My Datacenter is on fire by
Help , My Datacenter is on fireHelp , My Datacenter is on fire
Help , My Datacenter is on fireKris Buytaert
542 views38 slides

More from Kris Buytaert(18)

Years of (not) learning , from devops to devoops by Kris Buytaert
Years of (not) learning , from devops to devoopsYears of (not) learning , from devops to devoops
Years of (not) learning , from devops to devoops
Kris Buytaert65 views
Observability will not fix your Broken Monitoring ,Ignite by Kris Buytaert
Observability will not fix your Broken Monitoring ,IgniteObservability will not fix your Broken Monitoring ,Ignite
Observability will not fix your Broken Monitoring ,Ignite
Kris Buytaert167 views
Infrastructure as Code Patterns by Kris Buytaert
Infrastructure as Code PatternsInfrastructure as Code Patterns
Infrastructure as Code Patterns
Kris Buytaert117 views
From devoops to devops 13 years of (not) learning by Kris Buytaert
From devoops to devops 13 years of (not) learningFrom devoops to devops 13 years of (not) learning
From devoops to devops 13 years of (not) learning
Kris Buytaert185 views
Pipeline all the Dashboards as Code by Kris Buytaert
Pipeline all the Dashboards as CodePipeline all the Dashboards as Code
Pipeline all the Dashboards as Code
Kris Buytaert644 views
Help , My Datacenter is on fire by Kris Buytaert
Help , My Datacenter is on fireHelp , My Datacenter is on fire
Help , My Datacenter is on fire
Kris Buytaert542 views
Devops is Dead, Long live Devops by Kris Buytaert
Devops is Dead, Long live DevopsDevops is Dead, Long live Devops
Devops is Dead, Long live Devops
Kris Buytaert289 views
10 years of #devopsdays, but what have we really learned ? by Kris Buytaert
10 years of #devopsdays, but what have we really learned ? 10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ?
Kris Buytaert594 views
Continuous Infrastructure First by Kris Buytaert
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
Kris Buytaert568 views
Is there a Future for devops ? by Kris Buytaert
Is there a Future for devops   ? Is there a Future for devops   ?
Is there a Future for devops ?
Kris Buytaert478 views
10 Years of #devopsdays weirdness by Kris Buytaert
10 Years of #devopsdays weirdness10 Years of #devopsdays weirdness
10 Years of #devopsdays weirdness
Kris Buytaert400 views
ADDO 2019: Looking back at over 10 years of Devops by Kris Buytaert
ADDO 2019:    Looking back at over 10 years of DevopsADDO 2019:    Looking back at over 10 years of Devops
ADDO 2019: Looking back at over 10 years of Devops
Kris Buytaert578 views
Open Source Monitoring in 2019 by Kris Buytaert
Open Source Monitoring in 2019 Open Source Monitoring in 2019
Open Source Monitoring in 2019
Kris Buytaert1.5K views
Looking back at 5 years of #cfgmgmtcamp by Kris Buytaert
Looking back at 5 years of #cfgmgmtcampLooking back at 5 years of #cfgmgmtcamp
Looking back at 5 years of #cfgmgmtcamp
Kris Buytaert625 views
Looking back at 7.5 years of Devopsdays , DOd PDX by Kris Buytaert
Looking back at 7.5 years of Devopsdays , DOd PDXLooking back at 7.5 years of Devopsdays , DOd PDX
Looking back at 7.5 years of Devopsdays , DOd PDX
Kris Buytaert463 views
Devopsdays Amsterdam 2017 Keynote, looking back at 5 years of AMS by Kris Buytaert
Devopsdays Amsterdam 2017 Keynote, looking back at 5 years of AMSDevopsdays Amsterdam 2017 Keynote, looking back at 5 years of AMS
Devopsdays Amsterdam 2017 Keynote, looking back at 5 years of AMS
Kris Buytaert772 views

Recently uploaded

Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
113 views18 slides
MVP and prioritization.pdf by
MVP and prioritization.pdfMVP and prioritization.pdf
MVP and prioritization.pdfrahuldharwal141
39 views8 slides
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineShapeBlue
154 views19 slides
"Surviving highload with Node.js", Andrii Shumada by
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada Fwdays
49 views29 slides
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPoolShapeBlue
56 views10 slides
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlueShapeBlue
75 views23 slides

Recently uploaded(20)

Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue113 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue154 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays49 views
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by ShapeBlue
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool
ShapeBlue56 views
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
ShapeBlue75 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue97 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker50 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue110 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely76 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson142 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray10110 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue128 views
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by ShapeBlue
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
ShapeBlue86 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue93 views
Digital Personal Data Protection (DPDP) Practical Approach For CISOs by Priyanka Aash
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOs
Priyanka Aash103 views
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by ShapeBlue
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystems
ShapeBlue172 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue134 views
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by ShapeBlue
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates
ShapeBlue178 views

Groovy there's a docker in my application pipeline

  • 1. Groovy, there is a docker in my application pipeline Kris Buytaert @krisbuytaert
  • 2. Kris BuytaertKris Buytaert ● I used to be a Dev,I used to be a Dev, ● Then Became an OpThen Became an Op ● Chief Trolling Officer and Open SourceChief Trolling Officer and Open Source Consultant @Consultant @inuits.euinuits.eu ● Everything is an effing DNS ProblemEverything is an effing DNS Problem ● Building Clouds since before the bookstoreBuilding Clouds since before the bookstore ● Some books, some papers, some blogsSome books, some papers, some blogs ● Evangelizing devopsEvangelizing devops ● Organiser of #devopsdays, #cfgmgmtcamp,Organiser of #devopsdays, #cfgmgmtcamp, #loadays, ….#loadays, …. ● Part of the travelling geek circusPart of the travelling geek circus
  • 3. What's this devopsWhat's this devops thing anyhow ?thing anyhow ?
  • 4. C(L)AMSC(L)AMS ● CultureCulture ● (Lean)(Lean) ● AutomationAutomation ● MeasurementMeasurement ● SharingSharing Damon Edwards and John WillisDamon Edwards and John Willis Gene KimGene Kim
  • 5. NirvanaNirvana An “ecosystem” that supports continuous delivery, fromAn “ecosystem” that supports continuous delivery, from infrastructure, data and configuration management toinfrastructure, data and configuration management to business.business. Through automation of the build, deployment, and testingThrough automation of the build, deployment, and testing process, and improved collaboration between developers,process, and improved collaboration between developers, testers, and operations, delivery teams can get changestesters, and operations, delivery teams can get changes released in a matter of hours — sometimes even minutes–noreleased in a matter of hours — sometimes even minutes–no matter what the size of a project or the complexity of its codematter what the size of a project or the complexity of its code base.base. Continuous Delivery , Jez HumbleContinuous Delivery , Jez Humble
  • 6. This talk:This talk: Journey / Early steps of a team that is used toJourney / Early steps of a team that is used to infrastructure as codeinfrastructure as code Adopting containers step by step.Adopting containers step by step.
  • 9. " Our job as engineers (and ops, dev-ops, QA," Our job as engineers (and ops, dev-ops, QA, support, everyone in the company actually) is tosupport, everyone in the company actually) is to enable the business goals. We strongly feel thatenable the business goals. We strongly feel that in order to do that you must havein order to do that you must have the ability tothe ability to deploy code quickly and safelydeploy code quickly and safely. Even if the. Even if the business goals are to deploy strongly QA’d codebusiness goals are to deploy strongly QA’d code once a month at 3am (it’s not for us, we push allonce a month at 3am (it’s not for us, we push all the time), having a reliable and easythe time), having a reliable and easy deployment should bedeployment should be non-negotiablenon-negotiable."." Etsy Blog upon releasing DeployinatorEtsy Blog upon releasing Deployinator http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/
  • 10. We need :We need : AnAn unmodifiedunmodified artifact from build to deploy.artifact from build to deploy. SameSame artifact on dev, staging, acceptance,artifact on dev, staging, acceptance, production, shadow, dr …production, shadow, dr …
  • 11. Why ops like to packageWhy ops like to package ● Packages give you featuresPackages give you features •Consistency, security, dependenciesConsistency, security, dependencies ● Uniquely identify where files come fromUniquely identify where files come from •Package or cfg-mgmtPackage or cfg-mgmt ● Source repo not always availableSource repo not always available •Firewall / Cloud etc ..Firewall / Cloud etc .. ● Weird deployment locations , no easy accessWeird deployment locations , no easy access ● Little overhead when you automateLittle overhead when you automate ● CONFIG does not belong in a packageCONFIG does not belong in a package
  • 12. Example app for today :Example app for today : DashingDashing
  • 13. Dashing is DeadDashing is Dead ● No it has been forkedNo it has been forked ● https://github.com/dashing-io/dashinghttps://github.com/dashing-io/dashing ● s/dashing/smashing/g;s/dashing/smashing/g;
  • 14. Dashing {su/ro}cksDashing {su/ro}cks The GoodThe Good ● Lots of existingLots of existing widgetswidgets ● Easy to startEasy to start ● Simple rubySimple ruby ● Eventstream forEventstream for debuggingdebugging The UglyThe Ugly ● Ruby Gem hellRuby Gem hell ● Widget DeploymentWidget Deployment from a Gist ?from a Gist ? ● No config separationNo config separation
  • 15. Deploying DashingDeploying Dashing ● gem install dashinggem install dashing ● gem install is the new maven downloading thegem install is the new maven downloading the internetinternet ● Reproducable ?Reproducable ?
  • 16. A typical deploymentA typical deployment ● P all software is packagedP all software is packaged • CentOS mostlyCentOS mostly • RPM generated with fpmRPM generated with fpm • Build in Jenkins, uploaded to pulpBuild in Jenkins, uploaded to pulp ● C config is managed by PuppetC config is managed by Puppet ● S service is managed by PuppetS service is managed by Puppet
  • 17. Building Ruby/python/nodeBuilding Ruby/python/node ● We need a chrootWe need a chroot ● With the right ruby/python versionWith the right ruby/python version ● With the right dependenciesWith the right dependencies ● IsolatedIsolated ● Ruby => rvmRuby => rvm ● Ruby 2.1 (dashing is pretty picky aboutRuby 2.1 (dashing is pretty picky about versions)versions) ● What about we try this in a container ?What about we try this in a container ?
  • 18. Pipelines ?Pipelines ? ● One to build basic dashingOne to build basic dashing ● One to build and deploy the dashboards, scriptsOne to build and deploy the dashboards, scripts and all other dashing related stufand all other dashing related stuf • No hacking In production,No hacking In production, • Dashboards are production viewsDashboards are production views • Dev → prod promotionsDev → prod promotions
  • 19. JenkinsJenkins ● Starting point :Starting point : • Dev jenkinsDev jenkins • 1 master (no running jobs)1 master (no running jobs) • Multiple slavesMultiple slaves ● Production : diferent jenkins stack with similarProduction : diferent jenkins stack with similar pipelinespipelines ● We need to be able to reproduce a pipelineWe need to be able to reproduce a pipeline
  • 20. Building a dashingBuilding a dashing container step 0container step 0 ● Empty / standard distro containerEmpty / standard distro container updatesupdates add fpmadd fpm epel and build dependenciesepel and build dependencies ● Triggering docker from the cli, no plugin inTriggering docker from the cli, no plugin in Jenkins used (coz Bugz)Jenkins used (coz Bugz) ● $customer environment requires http_proxy$customer environment requires http_proxy
  • 21. Puppet & DockerPuppet & Docker ● https://github.com/garethr/garethr-dockerhttps://github.com/garethr/garethr-docker
  • 22. Building a dashingBuilding a dashing container step 1container step 1 ● Read rvm installation docsRead rvm installation docs ● frownfrown ● Frown againFrown again ● Containers => YoloContainers => Yolo ● fpm the whole treefpm the whole tree
  • 23. Building a dashingBuilding a dashing container step 2container step 2 ● Take rvm containerTake rvm container ● rvm install ruby-2.1rvm install ruby-2.1 ● fpm -s dir -t rpm -n rvm-ruby -v 2.1.8fpm -s dir -t rpm -n rvm-ruby -v 2.1.8 /usr/local/rvm/rubies/ruby-2.1.8/usr/local/rvm/rubies/ruby-2.1.8
  • 24. Building a dashingBuilding a dashing container step 3container step 3 ● Take ruby-2.1 containerTake ruby-2.1 container ● rvm use 2.1rvm use 2.1 ● gem install bundlegem install bundle ● gem install dashing (fills /usr/local/rvm/gems/ruby-gem install dashing (fills /usr/local/rvm/gems/ruby- 2.1.8 with gems2.1.8 with gems ● mkdir -p /opt/dashing/ && dashing new dashboardmkdir -p /opt/dashing/ && dashing new dashboard ● cd /opt/dashing/dashboardcd /opt/dashing/dashboard ● bundle installbundle install
  • 25. ● Now we have a “reproducable” container whichNow we have a “reproducable” container which will show an empty default dashboard uponwill show an empty default dashboard upon launchinglaunching ● We also have an artifact which we can redeployWe also have an artifact which we can redeploy ● We killed most of those layers afterwardsWe killed most of those layers afterwards
  • 26. Deploying DashboardDeploying Dashboard widgetswidgets dashing installdashing install GIST_IDGIST_ID
  • 27. A dashboardA dashboard ● git repo withgit repo with • Dashboards (html/erb)Dashboards (html/erb) • JobsJobs • Mostly with datasources hardcoded inMostly with datasources hardcoded in scriptsscripts • Not multitenantNot multitenant • WidgetsWidgets ● Pipeline to deploy and test thatPipeline to deploy and test that
  • 28. Deploying theDeploying the dashboardsdashboards ● From dashing containerFrom dashing container ● Cleanup default dashboards (twitter example)Cleanup default dashboards (twitter example) ● Bundle installBundle install • ruby scripts have dependenciesruby scripts have dependencies ● Package dependenciesPackage dependencies • actually whole /usr/local/rvmactually whole /usr/local/rvm ● Package dashboardPackage dashboard
  • 29. Testing the dashboardsTesting the dashboards ● Not all deploys were workingNot all deploys were working ● New job, required gems are missingNew job, required gems are missing ● TestingTesting • Build container with most recent dashboardBuild container with most recent dashboard • Based on the rpm'sBased on the rpm's • docker run -p 0.0.0.0:3030:3030 -ddocker run -p 0.0.0.0:3030:3030 -d dashing/dashboardsdashing/dashboards • wget http://localhost:3030/wget http://localhost:3030/
  • 30. Deploying theDeploying the dashboardsdashboards ● Deploy 2 rpms on vm's via mcollectiveDeploy 2 rpms on vm's via mcollective • dashing-gemsdashing-gems • dashing-dashboarddashing-dashboard on nodes with profile_dashingon nodes with profile_dashing ● mco package update dashing-gems -Fmco package update dashing-gems -F environment=svc1prd -C profile_dashingenvironment=svc1prd -C profile_dashing
  • 31. We need a local dockerWe need a local docker images repositoryimages repository ● Distributed Jenkins (master + multiple slaves)Distributed Jenkins (master + multiple slaves) ● An image build on node X is not available onAn image build on node X is not available on node Ynode Y ● Tests run on other nodeTests run on other node docker push dashing/dashingdocker push dashing/dashing docker push dashing/dashboardsdocker push dashing/dashboards
  • 32. We need a local dockerWe need a local docker images repositoryimages repository ● Pulp ?Pulp ? • Read only (August 2016)Read only (August 2016) • Good for mirrorsGood for mirrors ● Nexus / ArtifactoryNexus / Artifactory ● Docker registry (obsolete, used to be only in aDocker registry (obsolete, used to be only in a container)container) ● Docker-distribution : packages availableDocker-distribution : packages available
  • 33. Docker IncompatibilitiesDocker Incompatibilities ● Search path for imagesSearch path for images • Local firstLocal first • Upstream afterwardsUpstream afterwards Docker Inc says NODocker Inc says NO Redhat says YesRedhat says Yes ● --build-args -e--build-args -e • Redhat vs Docker implementation diferRedhat vs Docker implementation difer
  • 34. Problems solvedProblems solved ● Chrooted package build, no complex mockChrooted package build, no complex mock setups or specfilessetups or specfiles ● Internal docker repo allows reuse of buildInternal docker repo allows reuse of build images on other nodesimages on other nodes ● Jenkins and docker “integration”Jenkins and docker “integration”
  • 35. Rinse & RepeatRinse & Repeat ● Similar patterns forSimilar patterns for • Python , php, etc.Python , php, etc. ● Test can now run in containers with the correctTest can now run in containers with the correct versionversion ● Tests can be run with multiple versions of php/Tests can be run with multiple versions of php/ phython/ruby etc..phython/ruby etc..
  • 36. Can you Automate yourCan you Automate your Pipeline Creation ?Pipeline Creation ? ● Pipeline as CodePipeline as Code ● Jenkins Job DSLJenkins Job DSL ● Pipeline PluginPipeline Plugin
  • 37. Building the PipelineBuilding the Pipeline ● Dev environment for JenkinsDev environment for Jenkins • Fully puppetizedFully puppetized ● JobsJobs • Jenkins Job DSL PluginJenkins Job DSL Plugin • https://wiki.jenkins-ci.org/display/JENKINS/Johttps://wiki.jenkins-ci.org/display/JENKINS/Jo b+DSL+Pluginb+DSL+Plugin •
  • 38. SeedjobSeedjob ● GroovyGroovy ● GitGit ● Rebuild jobs onRebuild jobs on commitcommit ● Keep numbersKeep numbers ● Projects in foldersProjects in folders
  • 39. A dsl projectA dsl project def foldername = 'project-x'def foldername = 'project-x' folder(“${foldername}”)folder(“${foldername}”) job(“${foldername}/XYZ”) {}job(“${foldername}/XYZ”) {} job(“${foldername}/ABC”) {}job(“${foldername}/ABC”) {} buildPipelineView(“${foldername}/pipeline”)buildPipelineView(“${foldername}/pipeline”) { selectedJob(“${foldername}/XYZ”) }{ selectedJob(“${foldername}/XYZ”) }
  • 40. dashing dsl projectdashing dsl project job("${foldername}/dashing-dashboard-build")job("${foldername}/dashing-dashboard-build") job("${foldername}/dashing-dashboard-test")job("${foldername}/dashing-dashboard-test") job("${foldername}/dashing-upload2repo")job("${foldername}/dashing-upload2repo") job("${foldername}/dashing-dashboard-deploy")job("${foldername}/dashing-dashboard-deploy") job("${foldername}/dashing-dashboard-deploy-prd")job("${foldername}/dashing-dashboard-deploy-prd") job("${foldername}/dashing-build")job("${foldername}/dashing-build")
  • 41. Job partsJob parts ● Logrotator : how long to keep buildsLogrotator : how long to keep builds ● Scm : git configScm : git config ● Trigger : when to buildTrigger : when to build ● Label : where to runLabel : where to run ● Steps : shell(readFileFromWorkspace('file.sh'))Steps : shell(readFileFromWorkspace('file.sh')) ● publisherspublishers
  • 42. Publisher PartsPublisher Parts ● PublishBuildPublishBuild ● CloneWorkspacePublisherCloneWorkspacePublisher ● ArchiveArtifactsArchiveArtifacts ● Downstreamparametrized …Downstreamparametrized …
  • 43. Pipeline Problems solvedPipeline Problems solved ● No more promoted build pluginNo more promoted build plugin • Manual promote in pipelineManual promote in pipeline • Easy visabilityEasy visability ● No more clicking around to create / editNo more clicking around to create / edit pipelinepipeline ● One job per task, no reuse of jobs with diferentOne job per task, no reuse of jobs with diferent parametersparameters ● Centrally managed jobs (git)Centrally managed jobs (git)
  • 44. Solved problems bySolved problems by ContainersContainers ● Multiversion test of application stacksMultiversion test of application stacks • Eg diferent puppet/ php versionsEg diferent puppet/ php versions ● Both functional and unit testing in the pipelineBoth functional and unit testing in the pipeline ● Non blocking pipeline branches for futureNon blocking pipeline branches for future versionsversions ● Provide developers with producton alikeProvide developers with producton alike containerscontainers ● Growing container experience with ops folksGrowing container experience with ops folks
  • 45. ContactContact Kris BuytaertKris Buytaert Kris.Buytaert@inuits.beKris.Buytaert@inuits.be Further ReadingFurther Reading @krisbuytaert@krisbuytaert http://www.krisbuytaert.be/blog/http://www.krisbuytaert.be/blog/ http://www.inuits.be/http://www.inuits.be/ InuitsInuits Essensteenweg 31Essensteenweg 31 BrasschaatBrasschaat BelgiumBelgium 891.514.231891.514.231 +32 475 961221+32 475 961221