CI/CD Pipelines für Ansible

Ansible ist ein sehr starkes und mächtiges Werkzeug zur Automatisierung von Infrastrukturdiensten. Da es ohne eigene Agents funktioniert, ist es auch sehr leichtgewichtig und kann flexibel und dynamisch eingesetzt werden. Ansible wird primär über die Kommandozeile bedient. Dabei werden die erzeugten YAML Dateien abgearbeitet. Hier zeigt sich auch gleich ein Problem von Ansible. Nicht jeder User, der für spezielle Zwecke ein Ansible Playbook ausführen soll, ist vertraut mit der Funktionsweise von Ansible. Dies kann durchaus für eine starke Bremse des riesigen Potentials von Ansible sein. Wie schön wäre es doch, wenn es dafür Lösungen geben würde, die per Knopfdruck Automatisierungen auslösen könnten, egal wie komplex diese auch sein mögen. Um gleich mal die Spannung rauszunehmen: Es gibt solche Lösungen. Auch hier gibt es diverse Unterschiede. Eine sehr große und bekannte Lösung ist die von RedHat (IBM) bereitgestellte Ansible Automation Platform. Ich persönlich bin hiervon kein großer Fan, da ich die Lösung viel zu komplex und wenig intuitiv finde (sorry RedHat).

Mein persönlicher Favorit ist mittlerweile „Semaphore UI“ geworden. Hiermit lässt sich so ziemlich alles aus dem „Infrastructure as Code“ Spektrum bedienen. Neben Ansible lassen sich auch Terraform/OpenTofu oder klassische Skripte wie PowerShell, Bash oder Python ausführen. Es ist also für jeden etwas dabei.

Grundsätzlich ist Semaphore OpenSource und kann von jedem kostenfrei genutzt und betrieben werden. Sollten die Umgebungen und die Anforderungen daran steigen, gibt es auch noch bezahlbare Pläne, die eine deutlich erweiterte Funktionalität ermöglichen.

Die Installation von Semaphore ist denkbar einfach. Neben einer klassischen Installation lässt sich Semaphore auch als Docker Container oder in einem Kubernetes Cluster betreiben. Die Dokumentation hierfür ist wirklich sehr gut. Um es erstmal zu testen, ist ein Docker Container schnell aufgesetzt. Die Webseite bietet einen Assistenten, um eine fertige Docker Compose Konfiguration zu erzeugen. Wirklich sehr einfach und schnell umzusetzen.

Semaphore Oberfläche

Sobald die Semaphore Instanz läuft, müssen nur ein paar wenige Konfigurationen hinzugefügt werden, um eine erste Ansible CI/CD Pipeline auszuführen.

  • Repositories: Hier wird das Git Repository angegeben, in welchem sich die Ansible Playbooks befinden. Ob das Git Repo per SSH oder HTTPS angesprochen wird, kann beliebig gewählt werden. Auch der Branch der verwendet werden soll, kann definiert werden. Das ist besonders bei Staging Konzepten sehr sinnvoll und wichtig.
  • Keystore: Hier werden sensible Informationen wie der Schlüssel für den Ansible Vault, SSH Passphrases oder Git Deploy Token hinterlegt. Die Informationen sind im Nachhinein nicht mehr einsehbar.
  • Inventory: Hier werden die Ansible Inventories hinterlegt. Es kann durchaus mehrere geben, die dann später in den Pipelines ausgewählt werden können.

Jetzt kann auch schon die erste Pipeline konfiguriert werden.

Semaphore Ansible CI/CD Pipeline

Neben einem sprechenden Namen muss noch das auszuführende Playbook, das Inventory und das Git Repository ausgewählt werden. Allein mit diesen Informationen wäre die Pipeline schon nutzbar. Allerdings lassen sich auch noch weitere sinnvolle Konfigurationen vornehmen. Es können unter anderem noch die Vault Secrets angegeben werden und Tags definiert werden. Mit Tags können z.B. einzelne Tasks einer Rolle übersprungen werden oder genau anders herum nur spezielle Tags einer Rolle ausgeführt werden. Somit lassen sich flexible Szenarien erzeugen. Bei der Ausführung ist dann nicht mehr darauf zu achten. Die Pipeline ist ja entsprechend konfiguriert.

Semaphore CI/CD Pipeline ausführen

Die fertig konfigurierte Pipeline kann dann direkt aus der Weboberfläche ausgeführt werden. Hierbei lassen sich auch noch Optionen, wie das Log level oder ein möglicher Dry-Run festlegen.

Semaphore Pipeline Logs

Die Ausgabe der Log Informationen erscheint direkt im Browser und die Aktionen lassen sich direkt mitverfolgen.

Wer möchte, kann sich gewisse Pipelines auch automatisch zu definierten Zeiten ausführen lassen. Ich nutze das selbst für ein regelmäßiges Backup meiner GitLab Repositories und zum Sichern der Kubernetes etcd Datenbank.

Um die Standardisierung der Automatisierung noch weiter zu erhöhen, sind CI/CD Pipelines ein wichtiger Bestandteil. Eine einfache aber dennoch sehr effektive Lösung kann hierbei Semaphore sein.