Slide 1

Slide 1 text

What is a »full« stack, anyways? 1st international Heartbleed-Day @bascht

Slide 2

Slide 2 text

Galileo Galilei - 1636

Slide 3

Slide 3 text

DevOps

Slide 4

Slide 4 text

Death Ops!

Slide 5

Slide 5 text

Deaf Ops?

Slide 6

Slide 6 text

Silos

Slide 7

Slide 7 text

Rollenverteilung Creative Commons Attribution 2.0 Generic (https://commons.wikimedia.org/wiki/File:IBM_System_360_tape_drives.jpg)

Slide 8

Slide 8 text

…für Entwickler…

Slide 9

Slide 9 text

…für das Management…

Slide 10

Slide 10 text

Specialization is for insects. -- Robert A. Heinlein

Slide 11

Slide 11 text

Rollentausch

Slide 12

Slide 12 text

* { color: 'Kornblumenblau' !important; }

Slide 13

Slide 13 text

$ $ ( 'I') { $ ( 'will.wrap') . e a c h ( function('until'){ return t h a t [ 'crap'] . w o r k s ; } ) ; } ; ; ; ; // eat this, jslint!

Slide 14

Slide 14 text

$ sudo sudo s u - c "sudo do --what 'I want'"

Slide 15

Slide 15 text

Kleine Trutzburgen Quelle: Bundesarchiv, Bild 183-D0118-0014-002 / CC-BY-SA

Slide 16

Slide 16 text

Werkzeug p a c k a g e { 'libopenssl': ensure = > '1.0.1e-16.el6_5.7' }

Slide 17

Slide 17 text

Tools ansible bcfg2 cdist chef cfengine isconf juju lcfg ocsinventoryngwithglpi opsi pikt puppet quattor radmind rex rundeck smartfrog salt spacewalk

Slide 18

Slide 18 text

Verantwortung …und grüne Builds.

Slide 19

Slide 19 text

var m a n a g e m e n t , k u n d e ; function heilewelt(anforderung) { var i d e a l i s m u s ; return m e h r w e r t ; }

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Releases.

Slide 22

Slide 22 text

Stellt euch vor… …es ist Freitag.

Slide 23

Slide 23 text

Euer Deployment-Graph… …skaliert nicht

Slide 24

Slide 24 text

Bauchweh-Metrik Wer versteht alle base / helper / tools / domain Klassen noch? Wer versteht euer Deployment?

Slide 25

Slide 25 text

Busnumber

Slide 26

Slide 26 text

Warum nicht… So oft wie möglich deployen? Die neuen Mitarbeiter deployen lassen? Still und leise im Hintergrund deployen?

Slide 27

Slide 27 text

© 2013 — theprofoundprogrammer.com

Slide 28

Slide 28 text

2014 Infrastruktur-Code ist auch Code!

Slide 29

Slide 29 text

Entstehen eure Probleme… …im Code? …in der Serverkonfiguration? …beim Rollout? Im Zusammenspiel?

Slide 30

Slide 30 text

Keine Ausreden mehr.

Slide 31

Slide 31 text

Infrastruktur Problem? Bug-Ticket Infrastruktur Änderung? Feature-Ticket Großer Feature-Rollout steht bevor? Story-Ticket

Slide 32

Slide 32 text

Kein Commit ohne Ticket. Kein Major-Release ohne Ticket.

Slide 33

Slide 33 text

Code-Reviews! Auch für Infrastruktur. Erst recht für Infrastruktur.

Slide 34

Slide 34 text

Integration Gibt es Release-Branches für euer Infrastruktur- Repository? Zu welchem Infrastruktur-Branch gehört Application-Branch feature/gh-1382? Läuft Software 4.2.23 auch noch mit Migrations-Stand 2.4.21-hotfix? Wie geht es eurem Frontend, wenn es kein Backend mehr gibt?

Slide 35

Slide 35 text

Wie sieht euer Build aus? Quelle: GFDL image by user Fanghong. Creative Commons Attribution-Share Alike 3.0 Unported

Slide 36

Slide 36 text

Dokumentation (Donnergrollen)

Slide 37

Slide 37 text

CLI > Code > Wiki $ b i n / d e p l o y - - w a t ?

Slide 38

Slide 38 text

Das Firmenwiki Neue Mitarbeiter? Alte Hostnamen? Kreuz-Referenzen! Makros? Kopierbare Kommandos?

Slide 39

Slide 39 text

Eure Toolchain

Slide 40

Slide 40 text

versioniert korrekt benamt dokumentiert selbsterklärend umgebungsunabhängig

Slide 41

Slide 41 text

Y.A.G.N.I! vs. A.Y.G.N.I.A.L.O.?

Slide 42

Slide 42 text

Hübsch verpacken.

Slide 43

Slide 43 text

#!/bin/sh

Slide 44

Slide 44 text

#!/usr/bin/env ruby

Slide 45

Slide 45 text

... there are dark corners in the Bourne shell, and people use all of them. --Chet Ramey [ 1 -eq 1 ] & & [ - n "`echo true 1>&2`" ] # true [ 1 -eq 2 ] & & [ - n "`echo true 1>&2`" ] # (no output)

Slide 46

Slide 46 text

Für den Fehlerfall bauen Wie sehen eure Fehlerseiten aus? Kann jeder Layer kaputt gehen? Wie schnell könnt ihr zurückrollen? Könnt ihr Features deaktivieren? Könnt ihr stale content ausliefern?

Slide 47

Slide 47 text

Restore > Backup

Slide 48

Slide 48 text

Eure Toolchain wird wertvoller, je öfter ihr sie ausführt.

Slide 49

Slide 49 text

Mitarbeiter des Monats

Slide 50

Slide 50 text

Deployment ist nicht der letzte Schritt!

Slide 51

Slide 51 text

Lebenszeichen sofort nach dem Deployment einsammeln.

Slide 52

Slide 52 text

Puls fühlen $ c u r l - X G E T '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 }

Slide 53

Slide 53 text

Atem checken var c a s p e r = r e q u i r e ( 'casper') . c r e a t e ( ) ; var b a s e u r l = c a s p e r . c l i . g e t ( "baseurl") | | 'http://bascht.com'; c a s p e r . s t a r t ( b a s e u r l , function() { this. c a p t u r e ( 'shots/homepage.png') ; this. t e s t . a s s e r t T i t l e ( 'bascht.com') ; this. t e s t . a s s e r t E x i s t s ( 'input[action$="/search"]', 'Yay!') ; this. c l i c k L a b e l ( 'Blog', 'a') ; } ) ;

Slide 54

Slide 54 text

Treat staging failures like as if they were production failures. — Timothy Fitz (IMVU)

Slide 55

Slide 55 text

Das Frühstücks-Deployment ist die wertvollste Mahlzeit des Tages — Bascht (RedFrog Con 2013)

Slide 56

Slide 56 text

Kleiner Lackmustest # ~/.bash_login r m ~ / . b a s h _ h i s t o r y & & s y n c ; echo "They never fail who die, In a great cause! Lord Byron"; echo "Welcome to $(hostname).";

Slide 57

Slide 57 text

Sebastian Schulze (@bascht) , 29.years Software- & Infrastrukture-Developer Vogtland, Leipzig, Köln, Berlin Vielen Dank! Twitter / Github / ADN: @bascht