Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Deploy like nobody is watching
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
bascht
March 11, 2015
Technology
110
0
Share
Deploy like nobody is watching
Re-Run of my »Deployment« Talk for RubyShift Munich.
bascht
March 11, 2015
More Decks by bascht
See All by bascht
What is a »full stack« anyways?
bascht
1
530
Deployment ohne Ziepen
bascht
0
700
Other Decks in Technology
See All in Technology
探して_入れて_作って_使う_Agent_Skills___LT.pdf
peintangos
2
110
GitHub Copilot CLIでWebアクセシビリティを改善した話
tomokusaba
0
140
海外カンファレンス「JavaOne」参加レポート ユーザー系IT企業における目的・成果/JavaOne Report Purpose and Results in the User IT Company
muit
0
120
NFLコンペ2026 解法
lycorptech_jp
PRO
0
130
Javaで学ぶSOLID原則
negima
1
240
AI時代から振り返るTerraform drift運用の歴史 / AI Age Reflections on the History of Terraform Drift Operations
aeonpeople
1
620
インフラが苦手でも大丈夫! 紙芝居 Kubernetes -WWGT 10周年編-
aoi1
1
310
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
300
20260528_生成AIを専属DSに_Howの次にすべきことを考える
doradora09
PRO
0
270
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
110
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
420
ポスター発表&デモと総括 / Poster Presentations & Demonstrations and Summary
ks91
PRO
0
180
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Spectacular Lies of Maps
axbom
PRO
1
770
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
130
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
520
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
570
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Deep Space Network (abreviated)
tonyrice
0
160
Transcript
Deploy like nobody is watching. March 11th, 2015 @bascht
Ye olde DevOps
None
Silos
Distribution of roles
Creative Commons Attribution 4.0 International (http://commons.wikimedia.org/wiki/File:The_Devil_and_Dr._Faustus_meet._Wellcome_L0031469.jpg)
…the »old world« software developer…
…the »old world« system administrator…
So – let's swap roles. (Can't be that hard, no?)
* { /* No idea what I'm cascading here… */
color: 'Kornblumenblau' !important; }
$$('I'){ $('will#wrap').each(function('until'){ return this.self._self.that['crap'].works; }); };;;; // eat ._this, jslint!
$ sudo sudo su -c "sudo do --what 'I want'"
Small castles CC BY-NC-ND 2.0 — Jos van Wunnik
Galileo Galilei - 1636
nginx::resource::upstream { 'here_be_dragons': members => [ 'lolcathost:8080', 'lolcathost:8081', 'lolcathost:8082', ],
} nginx::resource::vhost { 'app.yournextstartup.com': proxy => 'http://here_be_dragons', }
Tools ansiblebcfg2cdistchefcfengineisconfjujulcfg ocsinventoryngwithglpiopsipikt puppetquattorradmindrex rundecksmartfrogsaltspacewalk
docker docker docker docker docker docker docker docker docker docker
docker docker docker docker
Being responsible for the artefact that is shipped. Every step
of the pipeline.
None
MANAGEMENT = :mediocre CUSTOMER = :opinionated def my_little_farm(requirements) engineering =
:truly_optimistic trap("SIGINT") { ignore_those_admins } pray_for(some.kind_of? Wonder) ship! end
Releases.
Imagine… …it's friday.
Your deployment plan… …doesn't scale very well.
gut metrics Who truly understands every base / helper /
tools / domain class? Who understands your deployment process?
busnumber
Why not… deploy as often as possible? let the new
employee deploy on her first day? deploy when nobody is watching?
2015 Infrastructure code is code as well!
Are your problems bubbling up… …from app code? …from your
server configuration? …during rollout? …because of poor orchestration?
© 2013 — theprofoundprogrammer.com
No more excuses. Infrastructure problem? File an issue Infrastructure change?
Hand in a story App Changes need infrastructure changes? Orchestrate your rollouts.
No commit without an issue id / feature branch. No
major release without documentation in an issue.
Do code reviews. Yes. for infrastructure. Yes. Even for infrastructure.
Sorry, but there is no one-size-fits-all solution. Quelle: GFDL image
by user Fanghong. Creative Commons Attribution-Share Alike 3.0 Unported
Well, turns out there is.
Documentation (imagine rolling thunder)
CLI > Code > Wiki $ bin/deploy --wat?
Actually use your Wiki! New employees? Old hostnames? Cross references!
Macros? Copy / Paste commands?
Your toolchain? in version control useful names well documented self-explanatory
independent from the environment
Use some nice wrapping.
#!/bin/(da|ba)sh #nope
#!/usr/bin/env ruby
--Chet Ramey “ ... there are dark corners in the
Bourne shell, and people use all of them. ”
Build for the worst. Do your error pages cover every
layer? Will every layer fail gracefully? Can you roll back? Should you roll back? Can you deactivate features? Can you afford to deliver stale content?
restore > backup
employee of the month
Updating artefacts isn't the last step!
Monitor every deployment. Gather health checks.
Steal good ideas! $ curl -XGET 'lolcathost:9200/_cluster/health?pretty=true' { "cluster_name" :
"prism_europe", "status" : "green", "timed_out" : false, "number_of_nodes" : 242, "number_of_data_nerds" : 242 "active_primary_shards" : 50, "active_shards" : 100, "people_actually_reading_this_slide": 1, "relocating_shards" : 0, "initializing_shards" : 0 }
Use obvious tools. var casper = require('casper').create(); var baseurl =
casper.cli.get("baseurl") || 'http://bascht.com'; casper.start(baseurl, function() { this.capture('shots/homepage.png'); this.test.assertTitle('bascht.com'); this.test.assertExists('input[action$="/search"]', 'Yay!'); this.clickLabel('Blog', 'a'); });
— Timothy Fitz (IMVU) “Treat staging failures like as if
they were production failures.”
We're almost done.
-- Robert A. Heinlein “Specialization is for insects.”
See how things work out. # ~/.bash_login rm ~/.bash_history &&
sync; echo "They never fail who die, In a great cause! Lord Byron"; echo "Welcome to $(hostname).";
Sebastian Schulze (@bascht / @bscht) , 29.years Software- & infrastructure
developer Vogtland, Leipzig, Köln, Berlin, Munich Thank you! Twitter / Github / ADN: @bascht