DevOps - Programmierst Du noch oder betreibst Du schon?

Preview:

DESCRIPTION

Seit der Jahrtausendwende ist in der Softwareentwicklung einiges in Bewegung geraten. Es dürfte heute kaum ein Unternehmen geben, das nicht mindestens agile Elemente in seinen Entwicklungsprozess integriert hat. Meist mit dem Ziel, das Risiko zu minimieren Software an den Anforderungen vorbei zu entwickeln und schlussendlich Kosten bei der Entwicklung zu sparen. Aber wie lässt sich agile Softwareentwicklung in den Betrieb integrieren? Wie läuft das bisher?Welche Probleme gibt es dabei und wie kann man diese lösen?Im Vortrag wird anhand praktischer Erfahrung darauf eingegangen, wie agile Softwareentwicklung durch Continuous Deployment und Continuous Delivery das Betriebsumfeld innovieren kann.

Citation preview

14.03.12

DEVOPSPROGRAMMIERST DU NOCH ODER BETREIBST DU SCHON?

Jean-Pierre König @jpkoenig

Agenda

• Status Quo – „Wall of Confusion“• Agile Movement, Software Entwicklung • DevOps• DevOps @memonews

14.03.12

2

About me

Jean-Pierre KönigHead of Technology,

MeMo News AGDipl. Informatiker

Tags: Agile, BigData, Hadoop

14.03.12

WALL OF CONFUSIONStatus Quo

• Softwareentwicklung & Systembetrieb organisatorisch klar getrennt

• Auslagerung von Organisationseinheiten in andere Unternehmen

IT Welt

14.03.12

OutsourcingBAR Corp.

Software BetriebFinanzen VerkaufPersonal

FOO Inc.

... ...

Betrieb

Gründe

• Skaleneffekt beim Konsolidieren des Systembetriebs nutzen• Personalbedarf im Betrieb steigt nicht zwangsläufig

proportional zur Anzahl der zu betreuenden SystemeBetrieb mehrerer Systeme bündeln und an ausgewiesene Organisationseinheiten übergeben ist wirtschaftlich vorteilhaft

• Betriebs- und Administrationsaufgaben erfordern anderes Mitarbeiterprofil

14.03.12

Ergebnis

• Etablierte „Schnittstelledefinition“ zwischen beiden Welten – Wall of Confusion• Wie überführt man Software in den Betrieb?• Wie kann man sicherstellen, dass der Betreib

den Anforderungen der Stakeholder gerecht wird?

• ...• Prozesse, Metriken, SLA‘s, Regelungen, ...

14.03.12

Die IT Infrastructure Library (ITIL) ist eine Sammlung von Best Practices bzw. Good Practices in einer Reihe von Publikationen, die eine mögliche Umsetzung eines IT-Service-Managements (ITSM) beschreiben und inzwischen international als De-facto-Standard hierfür gelten.Quelle: http://de.wikipedia.org/wiki/IT_Infrastructure_Library

• automatisiert • formal

14.03.12

Ergebnis (2)

I want change!

I want stability!

Dev Ops

Allenfalls eine funktionale Zusammenarbeit, aber wenig effizient bzw. effektiv.

ZEIT FÜR VERÄNDERUNGDevs

Warum?

Bis zur Jahrtausendwende - klassische SoftwareEntwicklungsmethoden etabliert

Nachteilig:• Plangetrieben• Vollständige Erfassung aller Anforderungen nur

mit immensem Aufwand möglich• „Keine“ Flexibilität bei geschäftlicher,

gesetzlicher oder technischer Veränderung• ...

Releasezyklus

Releasezyklus

Klassisch

14.03.12

Initialisierung

Analyse

Entwurf

Realisierung

Einführung

Nutzung

ZeitDev Ops...

+ Anwender

zentraleQA

zentraleQA

zentraleQA

zentraleQA

zentraleQA

Ops

Time to Release

Agile, Agile, Agile

Seit ca. 2003 Kanban & Scrum im AufwandZiele:

• Risiko minimieren, an Anforderungen vorbei zu entwickeln

• Entwicklungskosten einsparen, Time-To-MarketVoraussetzungen:

• Besseres Zusammenspiel zwischen Entwicklern und Nutzern, Anwender einbinden

• Kürzere Entwicklungszyklen

14.03.12

Analyse & Design

Implementierung

Test & Demo

Analyse & Design

Implementierung

Test & Demo

Analyse & Design

Implementierung

Test & Demo

Releasezyklus

Releasezyklus

Agile/Iterativ

14.03.12

Analyse & Design

Implementierung

Test & Demo

Einführung

Nutzung

Zeit

Scrum Team (Dev) Ops+ Anwender

zentraleQA

zentraleQA

Ops

Time to Release + (Proxy-) Anwender

Sprint 1 2 3 4 ... n

Analyse & Design

Implementierung

Test & Demo

„Agilisierter Wasserfall“

DEVOPSDie Lösung

Analyse & Design

Implementierung

Test & Demo

Einführung

Nutzung

Analyse & Design

Implementierung

Test & Demo

Einführung

Nutzung

Analyse & Design

Implementierung

Test & Demo

Einführung

Nutzung

Releasezyklus

Releasezyklus

DevOps

14.03.12

Analyse & Design

Implementierung

Test & Demo

Einführung

Nutzung

ZeitDelivery Team

Time to Release

+ (Proxy-) Anwender

Sprint 1 2 3 4 ... n

Auch: Continuous Delivery, Continuous Deployment

Releasezyklus

Releasezyklus

Releasezyklus

Analyse & Design

Implementierung

Test & Demo

Einführung

Nutzung

DevOps steht für ...

• Engere Verbindung von Entwicklungsabteilung und Systembetrieb unter Zuhilfenahme agiler Praktiken• Entsprechende Kultur im Umgang miteinander

• Werkzeuge, mit denen sich Betriebsaufgaben automatisieren lassen• Zunahme der Häufigkeit von Änderungen bei

gleichzeitiger Risikominimierung

14.03.12

DevOps

... is emerging set of principles, methodsand practices forcommunication, collaboration and integration between...[wikipedia]

14.03.12

Patrick Debois prägte den Begriff 2009 erstmalig auf der devopsdays.org Konferenz

TechnologyOperations

DevOps

Funktionierts?

• Google (2010): > 20‘000 Experimente führten zu mehr als 500 Updates verschiedener Algorithmen – fast 2 mal täglich

• Wordpress (2005-2010): > 25‘000 Releases – ca. 16 pro Tag

• Etsy, (2010): > 25 Releases/Tag

14.03.12

PRINCIPLESDevOps

DevOps Principles

• Reproducible, automated releasing• Fail fast – fail early – fail often• Don’t hack under stress – find, fix & start over!• Everything is under version control• Don‘t blame others• It‘s not (mine|yours|theirs ) – it‘s our• Continuous improvement

14.03.12

TOOLSDevOps

Betriebshandbuch

1. Gemeinsames Vokabular (DSL) definieren2. Gemeinsames Beschreiben aller notwendigen Schritte3. Direkte Überführung in ein ausführbares Programm4. Versionierung des Programms zusammen mit der Software

Tools (1)

Dev

• „keine“ tiefen Kenntnisse über das Verhalten von Anwendungen auf dem Zielsystem• „wenig“ Informationen über die Funktionen einer Anwendungen • „wenig“ Informationen zur Konfiguration

• „nicht“ versiert in Shell Programmierung• „keine“ fundierte Kenntnisse im Umgang mit Unix-Systemen

Ops

14.03.12

„Infrastructure as Code“

• Sehr schnelle betriebsfertige Einrichtung mehrerer Systeme aus einer einheitlichen Quelle

Betriebshandbuch

1. Gemeinsames Vokabular (DSL) definieren2. Gemeinsames Beschreiben aller notwendigen Schritte3. Direkte Überführung in ein ausführbares Programm4. Versionierung des Programms zusammen mit der Software

Tools (2)

Dev

•„wenig“ Informationen zur Installation einer Anwendung auf dem Zielsystem

• „keine“ Informationen zu Installationspfaden und EnvironmentVariablen

Ops

14.03.12

• Sehr schnelles Deployment einer lauffähigen Anwendung pro Umgebung

Deployment von Anwendung

capistranoFabric

@MEMODevOps

14.03.12

Infrastructure as Code

• Open-SourceSoftware, YMC AG

• Produktiver Einsatz: Schweizer Fernsehen

• PHP-basiert, automatisiert

14.03.12

[Basics]Name=k3‐s14Networks[]=lanIPv4forwarding=enabled

AdminGroups[]=ymcRootAccessToAnyHost

cnames[]=disabled

LVM[]=rootLVM[]=swap

[LVM_root]Size=10GFilesystem=ext4

[LVM_swap]Size=5GFilesystem=swap

[Network_lan]Interfaces[]=1IP=10.147.213.14Netmask=255.255.0.0Gateway=10.147.89.254Layout=singleRoutes[]=disabled

[Interface_lan1]hwAddr=00:1b:05:93:d5:0eConnectedToInfo=r2‐s5

[Monitoring]CheckGroups[]=ymcClusterNodeDefaultCheckGroup

[Basics]Name=memo‐test‐hmasterIPbase=10.147.55Fixed=1VirtualIP=disabledHA[]=disabledPort=22

Servers[]=k3‐s14

cnames[]=disabled

Admins[]=ymc‐jaouAdmins[]=memo‐jekoAdmins[]=memo‐vakiAdmins[]=memo‐nikuAdmins[]=memo‐chgu

LVM[]=disabled

Mount[]=disabled

[k3‐s14]Number=1

...

Deployment

• Web Anwendung• capistrano

• Java Anwendung• Jenkins*

(PostBuildSteps)

• capistrano*

14.03.12

[9:33:14] nkuebler:processr git:(master) $ cap unicorn:starttriggering start callbacks for `unicorn:start'

* executing `multistage:ensure'*** Defaulting to `rapid‐test'* executing `rapid‐test'* executing `unicorn:start'* executing `unicorn:start_production'* executing "if [ ‐f /usr/share/memo‐processr/shared/pids/unicorn.pid ] && kill ‐0 $(</usr/share/memo‐processr/shared/pids/unicorn.pid) >/dev/null 2>&1; then echo 'unicorn already running'; else echo 'starting unicorn...'; source /usr/local/rvm/environments/ruby‐1.9.2‐p290; cd /usr/share/memo‐processr/current && /usr/share/memo‐processr/shared/binstubs/unicorn ‐E production ‐D ‐c /usr/share/memo‐processr/current/config/unicorn/production.rb; fi"

servers: ["k3‐s7.ymchq", "k3‐s8.ymchq", "k3‐s9.ymchq", "k3‐s10.ymchq", "k3‐s19.ymchq", "k3‐s20.ymchq"]

[k3‐s7.ymchq] executing command[k3‐s8.ymchq] executing command[k3‐s9.ymchq] executing command[k3‐s10.ymchq] executing command[k3‐s19.ymchq] executing command[k3‐s20.ymchq] executing command

** [out :: k3‐s19.ymchq] starting unicorn...** [out :: k3‐s10.ymchq] starting unicorn...** [out :: k3‐s7.ymchq] starting unicorn...** [out :: k3‐s20.ymchq] starting unicorn...** [out :: k3‐s8.ymchq] starting unicorn...** [out :: k3‐s9.ymchq] starting unicorn...

command finished in 4967ms* executing `unicorn:start_test'* executing "if [ ‐f /usr/share/memo‐processr/shared/pids/unicorn.pid ] && kill ‐0 $(</usr/share/memo‐processr/shared/pids/unicorn.pid) >/dev/null 2>&1; then echo 'unicorn already running'; else echo 'starting unicorn...'; source /usr/local/rvm/environments/ruby‐1.9.2‐p290; cd /usr/share/memo‐processr/current && /usr/share/memo‐processr/shared/binstubs/unicorn ‐E production ‐D ‐c /usr/share/memo‐processr/current/config/unicorn/test.rb; fi"

servers: ["k3‐s17.ymchq"][k3‐s17.ymchq] executing command

** [out :: k3‐s17.ymchq] starting unicorn...command finished in 3884ms

* (noch) nicht in Produktion

DANKE!jean-pierre.koenig@menonews.com

Quellen & Literatur

http://www.jedi.be/blog/2010/02/12/what-is-this-devops-thing-anyway/

http://devopsdays.org/

http://www.agileweboperations.com/20-devops-guys

http://en.wikipedia.org/wiki/DevOps

http://dev2ops.org/blog/2010/2/22/what-is-devops.html

http://continuousdelivery.com/

Tools:

• http://wiki.opscode.com/display/chef/Home

• http://puppetlabs.com/

• https://github.com/capistrano/capistrano/wiki/Documentation-v2.x

• http://docs.fabfile.org/en/1.4.0/index.html

• http://rundeck.org/

Beispiele:

• Google: http://insidesearch.blogspot.com/2011/11/ten-recent-algorithm-changes.html

• Wordpress: http://toni.org/2010/05/19/

• Etsy: http://codeascraft.etsy.com/2011/02/04/

Recommended