DevOps Konzepte und Kultur
Der DevOps Weg ist das Ziel
Wie Ergebnisse und Kultur zusammenspielen
Um effektiv und effizient zu arbeiten, um verlässliche Ergebnisse und eine schnelle Umsetzung gleichzeitig zu schaffen, braucht eine Organisation die entsprechende Arbeitskultur. IT- und Softwareunternehmen müssen in einem Umfeld Ergebnisse liefern, welches ständigen technologischen und wirtschaftlichen Änderungen unterworfen ist. Sie müssen innovativ und responsiv sein ohne dieses auf Kosten der Stabilität einer technischen Lösung zu erreichen.
Scrum und agile Projektorganisation helfen diese Herausforderung zu lösen. Doch die Komplexität von Softwareprojekten erfordert Strukturen, die darüber hinaus gehen.
Aspekte, die über die reine Entwicklung einer Software hinaus gehen, können unter dem Begriff Software Delivery greifbar gemacht werden. Dies umfasst neben der Entwicklung, insbesondere die Bereitstellung der Software. Will man dabei sowohl effektiv als auch schnell sein, reichen Prozesse und Automatisierung alleine nicht aus. Zu viel Bürokratie lähmt und schadet sogar. Kombiniert man jedoch die richtigen Ideen und Praktiken, kann man alles gleichzeitig haben: Schnelligkeit, Skalierbarkeit und Stabilität.
Wie dies funktioniert wird mit dem Begriff DevOps beschrieben. DevOps setzt dabei sowohl auf technische Praktiken als auch auf organisatorische Ideen und Prinzipien.
Ausgangspunkt und Grundidee von DevOps ist die Kombination aus Software-Development und Software-Operations. Personell sollte keine Trennung zwischen Entwicklung und dem eigentlichem Betrieb existieren. Dazu kommen weitere, verwandte Aspekte, wie ein hohes Bewusstsein für Sicherheitsthemen. Alle Entwickler:innen sollten im Umgang mit Linux, der Shell und den grundsätzlichen Anforderungen an den Betrie von Software vertraut sein. Die Automatisierung von Deployment-Vorgängen sollte eine Selbstverständlichkeit sein.
DevOps verbindet
Was heißt DevOps konkret für Arbeits-Organisation und Arbeits-Kultur?
DevOps setzt wie Scrum auf einen guten Informationsfluss und Kollaboration. Das Ziel / die Mission steht höher als die Grenzen, die durch Rollen, Teams, Abteilungen oder Regeln gegeben sind. Verantwortung für Ergebnisse wird ganzheitlich wahrgenommen. Neue Ansätze werden implementiert, statt reguliert. Schlecht funktionierende Ansätze werden jedoch genauso schnell wieder verworfen. Fehler werden in dem Bewusstsein analysiert, dass meist verschiedene Faktoren und Ursachen zusammenspielen. So können diese Fehler nachhaltig auf verschiedenen Ebenen adressiert und in Zukunft vermieden werden, statt nur eine oberflächliche Erklärung zu finden.
Automatisierung
Unser Anspruch ist es, einen immer höheren Automatisierungs-Grad im Zusammenhang mit unserem Betrieb zu erreichen. Dabei spielen natürlich Faktoren wie Schnelligkeit und Kostenersparnis eine Rolle. Mindestens genauso wichtig ist hier allerdings der Aspekt der Reproduzierbarkeit. Die starke Integration von Softwareentwicklung und Betrieb mit dem gleichzeitigen Anspruch agil zu sein, erfordert die Orchestrierung einer großen Palette von Technik. Diese zielgerichtet und vor allem reproduzierbar zum Einsatz zu bringen, wird durch Automatisierung an vielen Stellen stark vereinfacht und zum Teil sogar erst möglich gemacht. Der größte Teil der hier erwähnten Tools zielt auf diesen Effekt ab.
Continous Delivery
Mit der Praxis der Continuous Integration wird sichergestellt, dass alle freigegebenen Code-Änderungen zusammenlaufen und die Software weiterhin voll funktionsfähig bleibt. Mit der Unterstützung von Git und Jenkins, und mit Hilfe einer hohen Testabdeckung als Ergebnis unserer testgetrieben Entwicklung, wird sichergestellt, dass Überraschungen sehr selten sind. Im nächsten Schritt werden die Anpassungen an die Software vollautomatisch auf das Testsystem ausgeliefert. So kann sich jeder interessierte Projektbeteiligte über den aktuellen Stand der Software informieren: Nur wenige Minuten nach Umsetzung eines Features steht es zur Ansicht bereit. Dieser Prozess ist auch Teil unserer gelebten Scrum Softwareentwicklung.
Nach Absprache mit unseren Kunden sind wir durchaus gerne bereit, dieses Vorgehen auf die Produktions-Umgebung auszudehnen. Für Software-Plattformen, deren Geschäftsmodell schnelle Änderungen erfordert, sind wir so in der Lage jederzeit und bei Bedarf mehrfach täglich Änderungen an der Software vorzunehmen.
Konfigurationsmanagement
Entweder stellt der Kunde die Server für den Betrieb zur Verfügung oder wir übernehmen das Hosting der Anwendung. Doch die Provisionierung der Maschinen wird in der Regel durch uns vorgenommen. Hier spielen die Aspekte Sicherheit und Vollständigkeit der Installation eine große Rolle. Dafür ist eine möglichst hohe Reproduzierbarkeit nötig. Um dies zu erreichen, arbeiten wir mit Checklisten und automatisieren, wo möglich, das Konfigurationsmanagement. Hierfür setzen wir aktuell Puppet ein.
Sicherheit
Die Sicherheit der von uns betriebenen Software, insbesondere der Daten, genießt bei uns einen hohen Stellenwert. Dies beginnt bereits bei unserer hausinternen Infrastruktur auf Basis von Open Source Software, den darin eingesetzten Firewall-Technologien und asymmetrischen Verschlüsselungsverfahren und zieht sich durch die gesamte Software, die für die Entwicklung und den Betrieb genutzt wird. Die im Internet stehenden Server erhalten darüberhinaus gesonderte Aufmerksamkeit. Diese besteht aus einer Kombination von Automatisierung, dem Einsatz von Icinga zum Monitoring und einem großen Know-How und Interesse an Sicherheits-relevanten Themen. Dieses Know-How fließt insbesondere bei der oben genannten, weitgehend mit Puppet automatisierten, Provisionierung der Server ein. Somit wird sichergestellt, dass alle durch uns betriebenen Maschinen den selben und aktuellen Stand in Punkto Sicherheit haben.
Monitoring
Probleme erst gar nicht aufkommen zu lassen, ist natürlich unser primäres Ziel. Doch es wird sich nicht immer erreichen lassen. Also gilt es möglichst, Probleme festzustellen und darauf zu reagieren, bevor Nutzer sie bemerken. Zur Überwachung der durch uns betriebenen Software und des damit in Zusammenhang stehenden Netzwerkes nutzen wir Icinga. Durch die Überwachung der unterschiedlichen Dienste lassen sich nicht nur spontane Ausfälle erkennen, sondern auch sich anbahnende Probleme, wie z.B. knapp werdender Plattenplatz oder auslaufende SSL-Zertifikate, identifizieren.
Über den Zustand der betriebenen Rails-Anwendung lassen wir uns durch Errbit informieren. Dieses Tool wertet automatisch Fehler der zu überwachenden Software aus, aggregiert diese und löst eine angemessene Benachrichtigung von zuständigen Personen aus. Dabei integriert es sich hervorragend in unseren Softwareentwicklungsprozess. Dies ist ein weiteres Beispiel dafür, wie eng Entwicklung und Betrieb bei Taktsoft zusammenhängen. Denn je aussagekräftiger eine Fehlermeldung im Zuge der Softwareentwicklung definiert wurde, um so schneller und genauer lassen sich auftretende Fehler im Betrieb eingrenzen und abstellen.
Helpdesk
Für den Fall, dass doch dringender, spontaner Kommunikationsbedarf im Zusammenhang Ihrer Software besteht, sind die Verantwortlichen auch kurzfristig in Ihrem Zugriff. Ob per Telefon, Mail oder über unser Ticketsystem: Wir punkten mit schnellen Reaktionszeiten.