Continuous-Integration-Tutorial: Bitbucket Pipelines einrichten

Nachdem wir uns Continuous Integration mit GitLab und GitHub angesehen haben, fehlt noch „Bitbucket Pipelines“ in der illustren Runde. Wie wir unseren CI-Prozess mit dem Dienst von Atlassian umsetzen, steht im Folgenden im Fokus.

Das Repo steht

Einmal mehr gehen wir von unserem Fizzbuzz-Projekt aus. Wir haben es unter die Git-Versionskontrolle bei Bitbucket gestellt und sind nun bereit, uns um die Continuous-Integration-Aspekte zu kümmern.

YAML soll es sein

Auch Bitbucket setzt bei der Konfiguration seines „Pipelines“ genannten CI-Dienstes auf YAML. Die Datei hierzu muss „bitbucket-pipelines.yml“ heißen. Folgt man den Anweisungen von Bitbucket, checkt man am besten im entsprechenden Repo unter bitbucket.org eine YAML-Vorlage für das eigene Projekt ein und passt die Vorlage anschließend an die eigenen Bedürfnisse an.

Hierzu klickst du im Repo links auf den den Eintrag „Pipelines“. Nun erfährst du, dass dir im kostenlosen Fall 50 Minuten kostenlos für deinen CI-Prozess zur Prüfung stehen. Das ist zwar nicht viel, aber fürs Kennenlernen reicht es auf alle Fälle.

Scrollst du ein wenig hinunter, siehst du, dass diverse Sprachen für eine YAML-Vorlage bereitstehen. Bitbucket hat erkannt, dass wir mit Python unterwegs sind und bietet uns die entsprechende Vorlage bevorzugt an. Zunächst wird auch hier festgelegt, in welcher Python-Umgebung wir arbeiten möchten: image: python:3.7.3. Anschließend gehen wir Schritt für Schritt die einzelnen Abschnitte unseres inzwischen von den GitLab- und GitHub-Tutorials bekannten CI-Prozess durch: Zunächst sorgen wir dafür, dass die Abhängigkeiten zur Verfügung stehen: - pip install -r requirements.txt

Schließlich führen wir die beiden in unseren Beispielen wichtigen Punkte aus: Wir lassen den Linter prüfen, ob unser Code dem PEP-8-Styleguide entspricht und im zweiten Schritt lassen wir unsere selbstgeschriebenen Tests laufen: - pylint *.py und in der Zeile darunter - python3 test*.py.

Das ist schon sehr angenehm, dass uns Bitbucket so sehr entgegenkommt, dass wir tatsächlich nur zwei Zeilen einfügen müssen, damit die erste Version eines sinnvollen CI-Prozesses loslegen kann.

Die YAML-Datei in Gänze

So sieht die benötigte „bitbucket-pipelines.yml“-Datei in Gänze aus. Wichtig sind die Zeilenumbrüche und die Einrückungen, die aus Leerzeichen und nicht aus Tabs bestehen. Wie auch in Python beginnen einzeilige Kommentare mit „#“:

image: python:3.7.3

pipelines:
  default:
    - step:
        caches:
          - pip
        script:
          - pip install -r requirements.txt
          - pylint *.py
          - python3 test*.py

Die YAML-Datei wird bei der Eingabe geprüft und Bitbucket weist sogar auf die fehlerhaften Stellen hin. Das ist eine große Hilfe, denn man muss den CI-Prozess nicht erst anwerfen, um festzustellen, ob die YAML-Datei korrekt ist.

Bitbucket zeigt, wo das Problem bei unserer YAML-Datei ist.
Bitbucket zeigt, wo das Problem bei unserer YAML-Datei ist.

Ansonsten lässt sich ein Durchlauf vom Aufrufen des Docker-Containers mit der angegebenen Python-Version, die Installation der benötigten Abhängigkeiten, die Prüfung durch den Linter und auch das Ausführen der Tests in einer Art Terminalfenster auf der Bitbucket-Seite beobachten – ähnlich wie man das auch bei GitLab und GitHub gesehen hat.

Läuft der CI-Prozess durch, zeigt dies ein grüner Balken an. Schlägt der Durchlauf fehl, färbt sich der Balken rot, außerdem bekommt man den Fehlschlag per E-Mail mitgeteilt.

Fazit

Da wir nun das dritte Mal einen Continuous-Integration-Prozess ins Leben rufen, gehen die Schritte recht einfach von der Hand, nicht zuletzt, weil uns Bitbucket mit einer entsprechenden Vorlage unterstützt und uns das YAML-Format inzwischen bekannt ist.

Bitbucket steht den beiden anderen Diensten hinsichtlich Einrichtung und Übersichtlichkeit des CI-Prozesses in Nichts nach. Lediglich die 50 Minuten bei kostenlosen Repositories scheinen im Vergleich etwas knapp bemessen.