So richten Sie CI unter GitLab mit Docker ein

Ein Beispiel mit Docker zum Testen und Erstellen Ihrer Pipeline

In der Vergangenheit haben Sie möglicherweise verschiedene Tools ausprobiert, um die Bereitstellung Ihrer Anwendungen effektiv zu verwalten. In diesem Tutorial zeige ich Ihnen eine schnelle und einfache Möglichkeit, eine kontinuierliche Integration für Ihre Umgebung mit GitLab und Docker einzurichten. Also lasst uns anfangen.

Folgendes werden wir einrichten:

  • Versionskontrolle
  • Issue Tracker
  • Dokumentation
  • Kontinuierliche Integration
  • Kontinuierliche Lieferung
  • Repository (Artefakte / Andockbilder)

Tools wie Jenkins eignen sich gut für die kontinuierliche Integration und Bereitstellung. Mantis hilft bei der Problemverfolgung. Um die Effizienz und Qualität unseres Projekts zu verbessern, müssen wir all diese Tools zusammenbringen. Zum Beispiel möchten wir möglicherweise, dass ein Git-Commit mit vorhandenen Problemen in Verbindung gebracht wird, oder dass ein automatisierter Test ausgelöst wird, nachdem Commits an den Master-Zweig gesendet wurden.

Normalerweise bieten die meisten Tools bereits eine sofort einsatzbereite Integration mit anderen gängigen Diensten, doch ist es manchmal immer noch schwierig, diese zu konfigurieren. Darüber hinaus würde der Workflow unterbrochen, wenn einer der Services in der Kette ausfällt. Es wäre also großartig, wenn es eine einzige Plattform gäbe, die all diese Anforderungen erfüllen könnte. Deshalb haben wir uns für GitLab entschieden.

GitLab CI

GitLab.com ist ein SAAS-basierter Dienst, bei dem Sie Ihr Git-Repository hosten, Probleme verfolgen und das Wiki in markdown schreiben können. Mit GitLab CI können Sie auch eine kontinuierliche Integration einrichten, indem Sie ein beliebiges Docker-Image verwenden, das in Docker Hub verfügbar ist. Schauen wir uns das folgende Beispiel an.

Das GitLab CI YML

GitLab CI verwendet eine YAML-Datei .gitlab-ci.yml, um die Projektkonfiguration zu definieren. Diese enthält eine Definition aller Phasen, die ausgeführt werden müssen, nachdem eine CI / CD-Pipeline als Reaktion auf ein Git-Push / Merge ausgelöst wurde. In diesem Beispiel haben wir ein einfaches Node.js-Projekt und möchten sicherstellen, dass der Code gut ist, indem wir einen Unit-Test ausführen. Um mitzuspielen, gabel dieses Repository und checke es aus.

In der obigen YAML-Konfigurationsdatei haben wir 3 Stufen definiert. Jede Phase ist nur eine in gulpfile.js definierte Schluckaufgabe. Jeder kann die Aufgabe lokal ausführen, solange Node.js installiert ist. In GitLab CI müssen wir nur erwähnen, welches Docker-Image benötigt wird. In unserem Fall ist das der Knoten: 6.11.2. Darüber hinaus kann dieses Bildattribut in der Stufendefinition definiert werden, sodass Sie für jede Stufe ein anderes Werkzeug verwenden können.

Die Definition der Bühne

Werfen wir einen genaueren Blick auf die Definition der Bühne.

Die Attribute von before_script und script können mehrere Werte haben (Array in .yml). Wenn die Skriptausführung fehlschlägt, wird die Bühne als fehlgeschlagen eingestuft.

Löse die Pipeline aus

Nehmen Sie einfach einige Änderungen am Master-Zweig vor und Sie finden die laufende Pipeline auf der Seite CI / CD -> Pipeline.

Die Pipeline-Geschichte

Sehen Sie sich die Bühne im Detail an

Klicken Sie auf eine bestimmte Pipeline und Sie können die Konsolenausgabe jeder Phase lesen. Dies ist nützlich, wenn die Phase / der Job fehlschlägt.

Die Bühnenleistung

Die Vorteile der Verwendung von GitLab CI mit Docker

Unterschiedliche Projekte erfordern möglicherweise unterschiedliche Abhängigkeiten wie Node.js, Ant, Maven. In der Vergangenheit musste ich bei der Verwendung eines Tools wie Jenkins sicherstellen, dass alle auf dem Server installiert sind. Mithilfe von Docker kann der Entwickler auf in Docker Hub verfügbare Abhängigkeiten verweisen, ohne den Serveradministrator jedes Mal auffordern zu müssen, solche Abhängigkeiten auf dem Server einzurichten. Tatsächlich hat Jenkins auch ein Pipeline-Plugin und könnte mit Docker zusammenarbeiten, um genau den gleichen Zweck zu erfüllen. Es ist jedoch ein zusätzlicher Aufwand erforderlich, um Jenkins in die Versionskontrolle zu integrieren.

Obwohl ich GitLab CI bevorzuge, heißt das nicht, dass es Jenkins vollständig ersetzen könnte. Jenkins bietet eine konfigurierbare Benutzeroberfläche, die auch für Nichtentwickler wie QA geeignet ist, um bestimmte Aufgaben wie Bereitstellungen und Integrationstests auszuführen.

Wählen Sie ein geeignetes Werkzeug - Es muss nicht perfekt sein

Es geht nicht darum, das perfekte Werkzeug auszuwählen. Stattdessen geht es mehr um die Leute, die es benutzen. Versuchen Sie also, bevor Sie nach einem neuen Werkzeug suchen, das Problem zu identifizieren, das Sie zuerst lösen möchten.

- Ursprünglich auf Boatswain Blog gepostet.