Garrett Honeycutt
gh@learnpuppet.com
learnpuppet.com
@learnpuppet
Continuous Deployment
Pipeline for Systems
2017-09-30
Ohio LinuxFest
Columbus, OH
# whoami
LearnPuppet.com
Automation consulting and
training specializing in Puppet
What is CD?
Continuous Delivery
Continuous Deployment
"Continuous Delivery doesn't
mean every change is
deployed to production ASAP.
It means every change is
proven to be
deployable at any time"
@ccaum
Why?
Fail fast
Quick feedback leads to
fixing the issue faster
Increasing Pain
Boring Deployments
Take the excitement out of
making changes
Putting out fires
Reactive or Proactive?
MTTR vs MTBF
Mean Time to Repair
Mean Time Between Failures
Agility
Response to business needs
Enablement
Enable your business
Debugging
Solve one problem at a time
Only Bob can Deploy
Allow anyone to deploy from
a single place
Concepts
Pipeline
Series of steps that are tied
together through automation
Jenkins
Determinism
Repeatable results
Artifact
All things necessary to
configure a system.
Artifact
Immutable
Artifact
You need an artifact store
Artifact
Moves through the pipeline
Tips for your
configuration
management tooling
Roles
Each system has exactly one
Profiles
Describe technical makeup
for roles
Site specific data
Control repo
mod 'ssh',
:git => 'https://github.com/ghoneycutt/
puppet-module-ssh.git',
:ref => 'v3.49.1'
Pipeline
Let's build a real pipeline.
Start small
Use manual triggers if
needed
Pipeline
Cost and Time rises each
step
Create an artifact
Static Analysis
Fast!
Save artifact
Upload to artifact store
Test config mgmt
Role based perspective
Functional testing
per role
Build a system and verify its
state
Functional testing
per role
Build a system and
verify its state
Functional testing
multi-node
Test the entire stack
Function testing of
systems
From point of view of
consumer
Tools galore
Lot's of choices here
Monitoring
Run monitoring against
environment
Performance Testing
Does your new feature
provide worse service?
Security Testing
Find vulnerabilities before
deployment
Compliance
Reporting that shows you are
in compliance
What to deploy?
Code and data to maintain
state
What to deploy?
Entire systems
Triggers
How does the pipeline start?
Module development
Individual modules
Module development
What to test?
Module development
How to test?
TravisCI
AppVeyor
Module testing
Matrix tests
Feedback in PR
Feedback in PR
Control repo
# upsteam repo
mod 'ssh',
:git => 'https://github.com/ghoneycutt/
puppet-module-ssh.git',
:ref => 'v3.49.1'
# private module
mod 'myapp',
:git => 'https://github.com/me/puppet-
module-myapp.git',
:ref => 'master'
Triggers
How does the pipeline start?
Where to put testing
scripts?
Keep tests close to code
Information Radiator
Let people know what's
happening
ChatOps
Tell people when something
breaks or is deployed
Culture
Breaking the build is OK
Failing in production
You are not done until you
write a test
Rely on the Pipeline
Never touching Prod
Start small
1. Add a different type of testing
Start small
1. Add a different type of testing
2. Write tests
Start small
1. Add a different type of testing
2. Write tests
3. Repeat
Using a Pipeline
1. Forces you to automate
Using a Pipeline
1. Forces you to automate
2. Will decrease MTTR
Using a Pipeline
1. Forces you to automate
2. Will decrease MTTR
3. Increases responsiveness to
the needs of your organization.
Confidence
Garrett Honeycutt
gh@learnpuppet.com
learnpuppet.com
@learnpuppet
Continuous Deployment
Pipeline for Systems
2017-09-30
Ohio LinuxFest
Columbus, OH

Continuous Deployment Pipeline for Systems - Presented at Ohio LinuxFest 2017-09-30