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
94
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
480
Deployment ohne Ziepen
bascht
0
620
Other Decks in Technology
See All in Technology
【Grafana Meetup Japan #6】Grafanaをリバプロ配下で動かすときにやること ~ Grafana Liveってなんだ ~
yoshitake945
0
220
iPhone Eye Tracking機能から学ぶやさしいアクセシビリティ
fujiyamaorange
0
200
生成AI時代のデータ基盤
shibuiwilliam
4
2k
エラーとアクセシビリティ
schktjm
0
230
サンドボックス技術でAI利活用を促進する
koh_naga
0
150
AWS環境のリソース調査を Claude Code で効率化 / aws investigate with cc devio2025
masahirokawahara
2
1k
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
2
2k
LLM翻訳ツールの開発と海外のお客様対応等への社内導入事例
gree_tech
PRO
0
430
実践AIガバナンス
asei
3
290
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
2
130
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
150
「魔法少女まどか☆マギカ Magia Exedra」の必殺技演出を徹底解剖! -キャラクターの魅力を最大限にファンに届けるためのこだわり-
gree_tech
PRO
0
430
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
20k
Building an army of robots
kneath
306
46k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
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