Softwareentwicklung

Ansible. Werkzeug für die agile Softwareentwicklung

Christian Claus stellt uns in seinem TECH TALK zu Ansible ein effizientes Tool zur agilen Softwareentwicklung vor

Agile Softwareentwicklung mit Ansible. TECH TALK.

In Zeiten von Automatisierung und komplexen Architekturen stellt sich häufig die Frage, wie Server automatisch konfiguriert und Applikationen ausgerollt werden können. Hintergrund ist der Trend zur agilen Softwareentwicklung, die nach immer effizienteren und ressourcenschonenden Methoden verlangt.

Ein mächtiges Tool auf diesem Markt ist Ansible, welches mit nur minimalen Voraussetzungen alles mitbringt, was sich Ops und DevOps* in diesem Bereich wünschen. Softwareentwickler Christian Claus gibt in seinem TECH TALK Ansible – A Brief Introduction eine praktische Einführung zum Thema.

Agile Softwareentwicklung mit Ansible

Server Provisioning

In der agilen Softwareentwicklung haben sich in den letzten Jahren immer stärkere Automatisierungsprozesse durchgesetzt. So gibt es heute nicht wenige Teams, die ihre Software automatisch von einem Continuous-Integration-Server bauen und testen lassen. Der Server bündelt daraus ggf. ein Docker-Image und dieses Docker-Image wird ggf. über eine Orchestrierungslösung wie Rancher, DC/OS oder Kubernetes deployt. Geht man jetzt einen Schritt weiter und gibt seinen DevOps die Kontrolle über diese Orchestrierungslösungen, stellt sich die Frage, wie das Konfigurieren dieser Systeme, die vielleicht direkt auf dem Blech laufen, ebenso automatisch konfiguriert und vorbereitet werden können. Ansible gibt darauf sehr sinnvolle praktische Antworten.

Aber auch abseits des Docker-Deployments gibt es seitens Ops und DevOps den Anspruch, die Systeme für die dort ausgerollte Software im Sinne der agilen Softwareentwicklung möglichst einfach zu konfigurieren und dabei Aspekte wie Wissenstransfer oder Dokumentation nicht aus dem Auge zu verlieren. Auch hier ist Ansible ein Freund und Helfer.

Configuration Management

Applikationen und Server müssen konfiguriert werden. Mal muss dafür Sorge getragen werden, dass Environment-Variablen korrekt gesetzt sind, mal sind es schlicht und ergreifend Konfigurationsdateien, die bestimmte Werte verlangen. Solche Konfigurationen sollten am besten für ganze Cluster ausgerollt werden, die alle ähnliche aber keine identischen Konfigurationen besitzen. Mit klassischen Ansätzen generieren wir in solchen Use Cases allerdings häufig viel zu hohe Aufwände – gerade weil Konfigurationen in der Regel keine einmalige Sache sind, sondern, genau wie die Applikationen selbst, leben und sich immer wieder ändern.

Application Deployment

Ist eine Applikation auszurollen, wünschen sich die wenigsten Nutzer dafür eine Downtime. Ansible kann das Rollout mit einer Vielzahl von fertigen Modulen unterstützen, so dass man eine Applikation ausrollt, die auf verschiedenen Nodes läuft, beispielsweise Node für Node – so dass immer Nodes erreichbar bleiben, um auf Nutzeranfragen zu antworten. Dabei gilt für jede Applikation beispielsweise:

  1. Die Applikation ist aus dem Monitoring zu entfernen
  2. Die Applikation ist aus den Load-Balancer-Regeln zu entfernen
  3. Die Applikation muss heruntergefahren werden
  4. Die neue Applikation wird deployt
  5. Das System wird neu konfiguriert
  6. Die Applikation startet
  7. Die Applikation wird wieder in den Load-Balancer aufgenommen
  8. Die Applikation wird wieder in das Monitoring aufgenommen

Continuous Delivery

Wenn das Applikationsdeployment in der agilen Softwareentwicklung ohnehin  automatisiert ist, warum dann nicht über den CI-Server anstoßen? Auch Entersprise-Produkte wie der Ansible-Tower von Red Hat können sich dieser Thematik annehmen. Damit kann jedes Entwicklerteam seine Applikationen in jedem Entwicklungszustand vollständige Kontrolle über das Rollout – auch auf verschiedenen Stages – erlangen.

Fazit

Ansible ist eine Bereicherung für die agile Softwareentwicklung. Ganz im Sinne der Continious Integration automatisiert es wichtige Teilprozesse in der Softwarekonfiguration und trägt so wesentlich dazu bei, dass Prozesse verschlankt werden können und der laufende Betrieb einer Software nicht gestört werden muss.

Weiterführende Links:

Slides: https://slides.com/chclaus/ansible

Github-Repository: https://github.com/chclaus/talk-ansible

*Anm. der Redaktion: Als DevOps bezeichnen wir in der Softwareentwicklung und Systemadministration einen Ansatz zur Prozessverbesserung. Es handelt sich um einen Kunstbegriff aus den Worten Development (Entwicklung) und IT Operations (IT-Betrieb). Ziel von DevOps ist es, durch gemeinsame Interessen, Prozesse und Werkzeuge (Tools) eine effizientere Zusammenarbeit der Bereiche Softwareentwicklung (Development), Operations und Qualitätssicherung (QS) zu erreichen. Dadurch sollen Softwarequalität, Entwicklungsgeschwindigkeit und Zusammenarbeit der beteiligten Teams verbessert werden (siehe dazu auch Wikipedia).

Agile Softwareentwicklung erfordert auch eine agile Dokumentation. Erfahren sie mehr im gleichnamigen TECH TALK von Simon Krackrügge.

Christian Claus

Christian Claus