Wir nutzen Continous Integration und Continous Deployment, um partielle Änderungen an komplexen digitalen Infrastrukturen methodisch sauber anzugehen. Relaunches werden damit um ein Vielfaches fehlersicherer. Damit nehmen wir unseren Kunden viel Risiko von den Schultern und halten ihnen den Rücken für kontinuierliche Verbesserung frei.

Aus so einer Art Masochismus heraus erinnert sich unser Marcus in diesem Artikel an die Qualen einer Internetepoche laaaange bevor es DevOps und Best-Practice-Methoden gab. Achtung, Nerd-Talk! Vorhang auf für einen Stream of Consciousness aus dem Gehirn eines Admins im Jahr 2012.


Es ist: der erste Dienstag im Monat. Es ist: Deploymenttag.

Pünktlich um 12 Uhr wird der Shop-Relaunch in den Wartungsmodus gesetzt. Der Shop-Kunde findet statt seiner Lieblingsprodukte folgende Info: „Liebe/r Kunde/in! Unser Shop wird derzeit upgedated. In 30 Minuten sind wir wieder für Sie da”.

Denn hey! In der Mittagspause shoppt ja sowieso niemand. Als Wartungsfenster ist „großzügig“ (räusper) eine Stunde angesetzt. Denn „der Admin muss ja nur ein Zip entpacken!“. So weit, so einfach.

Admin lädt also sein Zip vom Sharepoint-Server herunter. Diesmal knapp 500 MB („Irgendwie wird’s jedes Mal mehr!?“).

Dann entpacken wir mal …
Ach ja, vorher ein Backup machen:

:~$ mv webroot webroot-bak
Fehler! webroot-bak existiert schon.

Na gut:

:~$ mv webroot webroot-bakk

Jetzt entpacken:

:~$ unzip deployment-package.zip
Fehler: unzip not found!

Ach stimmt, letztes Mal hat der Head-Dev ja ein tar geliefert. Soviel Abwechslung muss sein.

:~$ apt install unzip
:~$ unzip deployment-package.zip

Entpacken ist fertig. Mittlerweile ist es 12:36. Die Disk IO auf der Kiste war auch mal besser, aber was will man erwarten bei 4000 php Files.
Dann machen wir mal die DB Migration:

:~$ php bin/console db:migrate

… rödel … rödel … rödel …

13:03 – successfully dropped 7043 items from database because image links are stale. You may now disable maintenance mode.

PANIK. Vergessen die Bilder aus dem Backup rüber zu kopieren.

Kaffeemangel!

Hoffen wir mal, dass die DB Backups funktionieren …

:~$ ssh backup.server.com
:~$ bconsole
bconsole :~$ restore --server=5 --days=28
bconsole :~$ cd /var/backups/db/dumps
bconsole :~$ ls
bconsole :~$ add dump.sql.gz
bconsole :~$ done
Proceed y/n:
bconsole :~$ y
bconsole :~$ exit

Solange der dump wiederhergestellt wird, schonmal die Bilder kopieren:

:~$ mv webroot-bak/public/img/* webroot/public/img/
Fehler: webroot-bak/public/img not found

Ach so. Das war ja ein altes Backup. Sollte man mal löschen.

Später:

:~$ mv webroot-bakk/public/img/* webroot/public/img/

… rödel … rödel … rödel …

13:21 – Fertig. Was macht das DB Backup? 82 %, kann ja nicht mehr lange dauern.

13:29 – Fertig. 2 GB Datenbank gezipped. Das sind dann wohl 20 entpackt, wird ne Weile dauern. Dann spielen wirs mal ein:

:~$ zcat dump.sql.gz | mysql db
Permission denied.

So, wo steht jetzt nochmal das DB Passwort? Grübel. Ach ja, im Passwortmanager. Windows VM hochfahren (die App gibt’s nicht für Linux). Bitte schalten sie den Computer nicht aus … Windows Update. Wenn nicht jetzt, wann sonst.

13:48 – Fertig. Passwortmanager starten. Suche und finde: mysql root pw for shop. “Root hat kein Passwort, einfach Socket Auth benutzen oder debian-sys-maint.”

Wunder der Technik.

:~$ zcat dump.sql.gz |
    mysql --defaults file=/etc/mysql/debian.cnf db

15:23 – Fertig. Also, nochmal DB Migration:

:~$ php bin/console db:migrate

15:31 – Fertig. Rufen wir mal die Seite auf. Oops, something went wrong.
Permissions vielleicht?

:~$ chown –R www-data: webroot

Seite neu laden.

500 Internal Server Error

Tja, keine Ahnung. Ein Admin ist ja kein php Entwickler. Skypen wir mal den Head Dev an.

„Schau ich morgen. Muss weg. Hund kriegt Impfung”.

Bildnachweis: SIphotography / iStock

OK, alles zurück. Nochmal DB einspielen.

16:52 – Fertig.

4 Stunden überzogen und wieder im Ausgangszustand.

Work well done.

Poor Marcus. Gottseidank ist die Zukunft endlich da. Heute arbeitet er mithilfe von hochwertigem Deployment für unsere Kunden – damit sich sein 2012er-Alptraum nie, nie mehr wiederholt.

#TechFact

Mit CI können fortlaufend neue Features entwickelt werden und laufend in Echtzeit deployt werden. Megabeispiele: Netflix oder Amazon nehmen pro Tag mehrere 1000 Deployments vor.

Quelle: ZDNet

Stichwort Automatisierung

Mithilfe von Continous Integration und Continous Delivery konzipiert unser Team ihre kostenoptimale, individuelle Infrastruktur entlang ihrer Vorgaben. Damit können ihre Entwicklerteams kleine Teile vom Code ändern und diese im Idealfall komplett automatisch testen bzw. auf die Produktiv-Umgebung deployen.

Unsere Rolle dabei?

Wir stellen die notwendige Infrastruktur nach Ihren Wünschen/Vorgaben/Notwendigkeiten möglichst kosteneffizient zusammen, sorgen für einen reibungslosen Betrieb und unterstützen Ihre EntwicklerInnen bei der Nutzung.

Unsere KundInnen profitieren somit von entscheidenden Wettbewerbsvorteilen: Zum einen ist ihr Produkt mit CI und CD stets auf dem neuesten Stand. Zudem verkürzt sich die Time-to-Market neuer Features erheblich. Und Bugs und Sicherheitslücken können schneller behoben werden.

CI / CD / DevOps auf einen Blick:

Vorteile von CI / CD für EntwicklerInnen:

  • Code-Änderungen sind kleiner und überschaubarer. D. h., Fehler werden schneller erkannt und die Fehlersuche viel leichter
  • EntwicklerInnen können sich aufs Codeschreiben konzentrieren und müssen sich relativ wenig Gedanken über’s Deployment machen
  • Deployments sind automatisiert, deshalb leichter zu reproduzieren und verbrauchen deshalb signifikant weniger Kapazitäten
  • keine Rattenschwänze durch langwierige Abnickverfahren
  • weniger manuelles Codeprüfen

Vorteile von CI/CD aus der Sicht unserer KundInnen:

  • bekommen ihr Produkt viel schneller auf den neuesten Stand
  • neue Features sind schneller auf dem Markt (Wettbewerbsvorteil)
  • Bugs und Sicherheitslücken sind schneller behoben

Sie wollen auf DevOps, Continuous Integration und Continuous Deployment umstellen?

Kontaktieren Sie uns und beauftragen Sie die einmalige Einrichtung im Rahmen Ihres bereits bestehenden Wartungsvertrags. Wir beraten Sie jederzeit!