Flinke erste Schritte

So gehst du vor, um das erste Mal im Flinkwerk Software schneller zu entwickeln und bereitzustellen.

1. Erstelle im Flinkwerk ein Git-Repository

Im ersten Schritt erstellst du ein Git-Repository im Flinkwerk. Hierfür steht im Flinkwerk GitLab zur Verfügung.

2. Führe lokal git clone aus

Das Repository bringst du wie gewohnt mit git clone auf deinen lokalen Rechner und danach checkst du den Code deiner Software ein.

3. Definiere die „Docker Compose“-Konfiguration

Anschliessend definierst du im Repository eine docker-compose.yml-Datei, in der alle Laufzeit-Komponenten konfiguriert werden, die deine Webanwendung zur Laufzeit braucht. Hierzu gehört zum Beispiel ein HTTP-Server wie Apache oder eine Datenbank wie MySQL.

Im Docker Hub findest du schon viele Docker Images und Flinkwerk beinhaltet noch weitere fertige und stabile Images, unter anderem für hoch skalierbare Webanwendungen - zum Beispiel ein Datenbank-Cluster. Das geniale ist: Du schickst einen Docker-File per git push ins Flinkwerk und es wird automatisch ein Docker-Image daraus erstellt.

4. Installiere und starte den Flink-Client

Sobald dies alles erledigt ist, installierst du den kostenlosen Flink-Client und startest mit dem Kommando flink dev start deine lokale Entwicklungsumgebung. In ihr kannst du Code-Änderungen so testen, als würden sie im Produktivsystem laufen.

Du kannst weitere beliebige Umgebungen erstellen - zum Beispiel für’s testen - indem du in Git Branches anlegst. Wenn du willst, kannst du für jeden Branch die Docker Compose-Konfiguration ändern, um die Laufzeitumgebung anzupassen.

5. Erstelle die Build-Konfiguration

Die DevOps-Verarbeitunsgprozesse werden in einer gitlab-ci.yml-Datei definiert. Diese legst du zusammen mit deinem App-Code im Git-Repository ab. In der gitlab-ci.yml-Datei definierst du die Reihenfolge, in der Build- und Deploy-Prozesse abgearbeitet werden. Sie könnte wie folgt aussehen:

job:setup:mysql:
  only:
    - develop
    - master
    - tags
  stage: setup
  image: registry.flinkwerk.tools:443/docker-images/rancher-pxc/ci-deploy-pxc:stable
  tags:
    - rancher-deploy
  variables:
    MYSQL_USER: pxc
    MYSQL_PASSWORD: secret
  script:
    - flinkwerk-rancher-pxc-add-database-and-user
                

Zum Beispiel definierst du dort den Job für das Setup eines MySQL-Cluster (job:setup:mysql). Dieser Job soll nur für bestimmte Code-Branches ausgeführt werden. In diesem Fall (only:) also für die develop-, master-Branches und wenn ein Git-tag vergeben wurde. Im Parameter stage legst du fest, dass dieser Job zur Phase setup gehört, innerhalb derer du noch weitere Jobs ausführen kannst. Schliesslich deklarierst du im Parameter image, dass dieser Job das Docker Image mit dem Percona XtraDB Cluster (PXC) für MySQL ausführen soll.

In tags wird definiert dass der GitLab-CI-Runner mit dem Namen rancher-deploy diesen Job ausführen soll. Mit diesem Runner wird nun das Docker-Image mit dem MySQL-PXC-Cluster durch das script mit dem Namen flinkwerk-rancher-pxc-add-database-and-user mit Hilfe von Rancher bereitgestellt. Unter variables werden der User-Name und das Passwort definiert.

In der Benutzeroberfläche von GitLab erhältst du innerhalb des Flinkwerks eine grafische Übersicht der Definitionen. Dort siehst du die gesamte DevOps-Pipeline mit mehreren Stages und Jobs, wie du sie in der gitlab-ci.yml definiert hast.

Das Besondere am Flinkwerk ist, dass es fertige Build- und Deploy-Routinen z.B. in Form von Docker Images bereithält, die du für deine Zwecke anpassen kannst. Zum Beispiel könntest du hier Unit Tests mit einbeziehen.

Da du die gesamte Build-Phase bei Bedarf individuell steuern und anpassen kannst, hast du die volle Kontrolle über alle Stufen im DevOps-Prozess. Mit dem Flinkwerk ist deine Software auf jeder Cloud lauffähig, weil du alle Aspekte der Laufzeitumgebung selbst im Griff hast. Den Rest, nämlich den Operations-Teil für hochverfügbare und skalierbare Anwendungen, übernimmt das Flinkwerk automatisch (Load Balancing, Replikation, Backups, etc.).

6. Orchestriere Docker und die Cloud mit Rancher

Deine Anwendung wird wie oben gezeigt mit rancher-deploy automatisch im Flinkwerk mit Rancher bereitgestellt. Danach läuft sie per Load Balancing immer und zwar ohne Single Point of Failure. Durch das unterbrechungsfreie Deployment entstehen bei Software-Updates keine oder für Legacy-Applikationen extrem verkürzte Downtimes. Rancher wird für die Orchestrierung von Docker-Containern eingesetzt, also für ihre Bereitstellung auf einer Cloud-Infrastruktur.

Rancher holt sich die Docker Images von der Registry und führt diese im Docker-Host aus. Deine Webanwendung wird so automatisch innerhalb der von dir vorgegebenen DevOps-Umgebung mit ihren eigenen Containern zum Laufen gebracht. Das tolle an Rancher ist, dass es deine Webanwendung in jeder beliebigen Cloud bereitstellen kann.

Auf welcher Cloud die Webanwendung läuft, kannst du im Flinkwerk festlegen und konfigurieren - auch per Code-Branch. Für die Cloud-Orchestrierung nutzt du im Flinkwerk Rancher. Zum Beispiel kann die Test-Umgebung im Flinkwerk oder auf Servern bei einem Hoster deiner Wahl laufen. Für die Staging- und Produktiv-Umgebung setzt du auf Amazon AWS, Microsoft Azure oder welche Cloud du auch immer bevorzugst.

Zur Auswahl stehen die folgenden Cloud-Anbieter: Amazon, Microsoft, Google, VMWare, Rackspace, Hetzner, 1&1, DigitalOcean, Openstack, Open Nebula und mehr.

Sobald deine Webanwendung vom Flinkwerk in der Cloud bereitgestellt wurde, kann der Benutzer über seinen Browser auf sie zugreifen. Er teilt der zuständigen Person Änderungswünsche mit. Diese wiederum spricht mit dem Entwickler und der Prozess beginnt von vorne.