class: center, middle, inverse # Configuration und Lifecycle Management sowie Echtzeitorchestrierung und Continuous Integration in IT-Firmen --- class: center, middle, inverse # Oder: Wie wird meine IT-Firma agiler und besser als die Konkurrenz? --- # Agenda 1. Aufbau IT-Firma 3. Probleme (nicht vorhandene CI) 4. Lösungsansätze 5. Puppet 6. Fazit --- class: middle, center, inverse ## Aufbau einer klassischen IT-Firma --- .left-column[ ## Aufbau ] .right-column[ * Unwichtige Abteilungen (Controlling, HR) * Dev Team * Ops Team ] --- .left-column[ ## Aufbau ### - Dev ] .right-column[ Aufgaben: * Weiterentwicklung der Produkte * möglichst oft möglichst viele neue Features * Bugs fixen im legacy Code ] --- .left-column[ ## Aufbau ### - Dev ### - Ops ] .right-column[ Aufgaben: * Einmalige Entwicklung der Infrastruktur für hauseigene Produkte * Regelmäßige Sicherheitsupdates * Nach Möglichkeit keine Featureupdates ] --- class: middle, center, inverse ## Probleme im Alltag --- .left-column[ ## Probleme ### - DevOps ] .right-column[ * klassische Dev Abteilung arbeitet gegen Ops * Ops Infrastruktur ist nicht für Produktupdates ausgelegt * Keine festen Regeln für das Einspielen von Produktupdates * Keine Automatisierung => Viele Fehlerquellen * Wie macht man Produktupdates rückgängig? ] --- .left-column[ ## Probleme ### - DevOps ### - Konkurrenz ] .right-column[ Konkurrenz updated Sonntag Nacht um 3Uhr ihr Produkt * Ops soll "mal eben" live Code ändern? * Hektisch Dev wachklingeln, Code ändern, Dev nimmt live? * Alle wachklingeln? * Einfach mal nix machen ] --- class: middle, center, inverse ## Lösungen - Welche Ansätze gibt es und was ist zu beachten? --- .left-column[ ## Lösungen ### - Ansätze ] .right-column[ * Komische Perl Skripte * Komische Python Skripte * Komische Bash Skripte * for-Schleifen ] --- .left-column[ ## Lösungen ### - Anforderung ] .right-column[ * Ausgangszustand muss bekannt sein * Wiederaufnahme partieller Änderungen * Rollback * Fire and forget ] --- ```perl use strict; $_='ev al("seek\040D ATA,0, 0;");foreach(1..3) {
;}my @camel1hump;my$camel; my$Camel ;while(
){$_=sprintf("%-6 9s",$_);my@dromedary 1=split(//);if(defined($ _=
)){@camel1hum p=split(//);}while(@dromeda ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;} $CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){ $camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift( @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if( defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@ camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\ 064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse; print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/; $_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval ("seek\040DATA,0,0;");undef$/;$_=
;s/\s*//g;( );;s ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124 \1 50\145\040\165\163\145\040\157\1 46\040\1 41\0 40\143\141 \155\145\1 54\040\1 51\155\ 141 \147\145\0 40\151\156 \040\141 \163\16 3\ 157\143\ 151\141\16 4\151\1 57\156 \040\167 \151\164\1 50\040\ 120\1 45\162\ 154\040\15 1\163\ 040\14 1\040\1 64\162\1 41\144 \145\ 155\14 1\162\ 153\04 0\157 \146\ 040\11 7\047\ 122\1 45\15 1\154\1 54\171 \040 \046\ 012\101\16 3\16 3\15 7\143\15 1\14 1\16 4\145\163 \054 \040 \111\156\14 3\056 \040\ 125\163\145\14 4\040\ 167\1 51\164\1 50\0 40\160\ 145\162 \155\151 \163\163 \151\1 57\156\056 ``` --- class: middle, center, inverse ## Puppet - Der heilige Gral? --- .left-column[ ## Puppet ### - Features ] .right-column[ * Client/Server Software * DSL - Domain Specific Language * Software defined Infrastructure * DB Anbindung für Reports * Testumgebung -> Liveumgebung ] --- .left-column[ ## Puppet ### - Features ### - Ablauf ] .right-column[ ![Right-aligned image](manifest_to_defined_state_split.png) ] --- .left-column[ ## Puppet ### - Features ### - Ablauf ### - Fachbegriffe ] .right-column[ * Lifecycle Management = Kompletten Lebenszyklus seiner Hardware nachvollziehen * Configuration Management = Systeme zu 100% automatisiert einrichten und verwalten * Continuous Integration = Mehrere Entwickler arbeiten parallel in Testumgebung + Migration in Liveumgebung * Echtzeitorchestrierung = Ohne Zeitverzögerung auf allen Systemen parallel arbeiten ] --- class: middle, center, inverse # Fazit ## Automatisierung verhindert manuelle Fehler ## Dev + Ops = DevOps = schnellerer + stabilerer Release von entwickelten Updates ## Automatisierung kann ganz viel parallel kaputt machen .footnote[© Tim Meusel]