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
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
540
Deployment ohne Ziepen
bascht
0
710
Other Decks in Technology
See All in Technology
CIで使うClaude
iwatatomoya
0
250
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
690
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
Claude Code 珍プレー好プレー
shinyasaita
0
330
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
180
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3.1k
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
2
1k
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
610
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
120
“それは自分の仕事じゃない"を越えて行け
yuukiyo
0
220
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
2
780
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
5.8k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
How to Ace a Technical Interview
jacobian
281
24k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
340
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
4 Signs Your Business is Dying
shpigford
187
22k
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