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
bascht
March 11, 2015
Technology
0
100
Deploy like nobody is watching
Re-Run of my »Deployment« Talk for RubyShift Munich.
bascht
March 11, 2015
Tweet
Share
More Decks by bascht
See All by bascht
What is a »full stack« anyways?
bascht
1
510
Deployment ohne Ziepen
bascht
0
680
Other Decks in Technology
See All in Technology
チームのモメンタムに投資せよ! 不確実性と共存しながら勢いを生み出す3つの実践
kakehashi
PRO
1
110
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
220
内製AIチャットボットで学んだDatadog LLM Observability活用術
mkdev10
0
110
OCI Security サービス 概要
oracle4engineer
PRO
2
13k
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
140
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
830
AIエージェント時代に備える AWS Organizations とアカウント設計
kossykinto
3
1k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/12 - 2026/2
oracle4engineer
PRO
0
140
[JAWSDAYS2026][D8]その起票、愛が足りてますか?AWSサポートを味方につける、技術的「ラブレター」の書き方
hirosys_
3
180
(Test) ai-meetup slide creation
oikon48
3
400
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
740
猫でもわかるKiro CLI(AI 駆動開発への道編)
kentapapa
0
220
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
86
Rails Girls Zürich Keynote
gr2m
96
14k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
140
The browser strikes back
jonoalderson
0
800
Art, The Web, and Tiny UX
lynnandtonic
304
21k
First, design no harm
axbom
PRO
2
1.1k
The untapped power of vector embeddings
frankvandijk
2
1.6k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
410
Typedesign – Prime Four
hannesfritz
42
3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
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