GitLab: CI/CD

Wie Sie GitLab CI/CD nutzen

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite GitLab Cloud Lösung, die speziell für Teams entwickelt wurde, die eine schnelle, sichere und skalierbare Umgebung benötigen:

  • Unbegrenzte Nutzer, Repositories, Datentransfers und CI/CD-Verarbeitungszeit für maximale Flexibilität.
  • Mühelose Updates per Klick, damit Ihre Umgebung immer aktuell bleibt – ganz ohne Ausfallzeiten.
  • Eigene Domain mit HTTPS-Verschlüsselung (zum Beispiel https://git.ihre-firma.com) für professionelles Auftreten und höchste Sicherheit.
  • Stetige Performance und starke Sicherheit auf Ihrer eigenen privaten, dedizierten Infrastruktur. Keine störenden Nachbarn, vollständige Isolation garantiert.
  • Wahl des Hosting-Standorts: 🇪🇺 Europa oder 🇺🇸 USA – passend zu Ihren Compliance- oder Latenzanforderungen.

Starten Sie in wenigen Minuten und konzentrieren Sie sich ganz auf Ihren Code. Die GitLab Cloud Hosting Lösung von Stackhero ist in etwa 5 Minuten einsatzbereit.

GitLab CI/CD ist eine leistungsstarke und integrierte Funktion von GitLab, einer weit verbreiteten Open-Source-Plattform für Versionskontrolle und Zusammenarbeit. Mit diesem Tool können Sie die entscheidenden Phasen des Build-, Test- und Deployment-Prozesses automatisieren und optimieren, um eine schnellere und zuverlässigere Auslieferung hochwertiger Software zu gewährleisten.

Beispielsweise können Sie mit GitLab CI/CD automatisierte Unit-Tests einrichten, die bei jedem neuen Commit in ein GitLab-Repository ausgelöst werden. Nach erfolgreichem Bestehen dieser Tests kann Ihr Code gebaut und in eine Staging-Umgebung für weitere Prüfungen bereitgestellt werden. Sobald alle Staging-Tests bestanden sind, kann das System den Code in die Produktionsumgebung übernehmen und so für Endnutzer verfügbar machen.

Ein herausragendes Merkmal von GitLab CI/CD ist die enge Integration direkt in GitLab. Dadurch können Sie Ihre CI/CD-Pipelines direkt innerhalb Ihrer Projekt-Repositories definieren und verwalten, was die Orchestrierung und Nachverfolgung Ihres gesamten Workflows erheblich vereinfacht.

GitLab CI/CD unterstützt eine breite Palette an Programmiersprachen, Frameworks und Tools und ist somit vielseitig genug, um unterschiedlichste Projekte abzudecken. Das anpassbare Pipeline-System ermöglicht es Ihnen, jede Phase des CI/CD-Prozesses individuell auf Ihre Anforderungen zuzuschneiden – egal ob Build, Test oder Deployment in verschiedene Umgebungen.

Zusammengefasst ist GitLab CI/CD eine umfassende Lösung zur Automatisierung und Optimierung von Software-Lieferprozessen. Entwickler können sich auf das Schreiben und Verbessern von Code konzentrieren, während die Plattform die operativen Aufgaben effizient übernimmt.

Wenn Ihr Projekt-Repository Dockerfile-Dateien enthält, können Sie den Prozess des Bauens, Ausführens und – falls erforderlich – Veröffentlichens von Docker-Images in ein Registry automatisieren.

Aktivieren Sie zunächst den "Docker in Docker" (DinD) Support in Ihrem Stackhero-Dashboard.

Die Aktivierung von DinD-Support stellt ein Sicherheitsrisiko dar, insbesondere wenn Sie Ihre Nutzer voneinander isolieren und verhindern möchten, dass sie auf die Projekte anderer zugreifen können.

Anschließend passen Sie Ihre gitlab-ci.yml-Datei an, um eine Pipeline-Konfiguration einzubinden, die Ihr Dockerfile mit DinD baut. Nachfolgend ein Beispiel für eine solche Konfiguration:

image: docker:29

build:
  stage: build
  services:
    - name: docker:29-dind
      alias: docker
  variables:
    # Weist das Docker CLI an, den Docker-in-Docker-Service über dessen
    # unverschlüsselte (non-TLS) Port zu nutzen. Siehe Hinweis unten, warum DOCKER_HOST wichtig ist.
    DOCKER_HOST: "tcp://docker:2375"
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - docker info
  script:
    # Ersetzen Sie "my-docker-image" durch den gewünschten Image-Namen:
    - docker build -t my-docker-image .
    # Optional: Testen Sie das Docker-Image:
    # - docker run my-docker-image /script/to/run/tests

Der Service docker:29-dind startet einen Docker-Daemon neben Ihrem Job, und DOCKER_HOST weist das docker CLI an, diesen zu verwenden. Setzen Sie immer DOCKER_HOST, wenn Sie einen docker:dind-Service deklarieren: Wenn Sie dies weglassen, verbindet sich das CLI stillschweigend mit einem anderen Daemon, und Ihr Build kann auch dann erfolgreich sein, wenn der Service falsch konfiguriert ist – was echte Probleme verschleiert. DOCKER_TLS_CERTDIR: "" sorgt dafür, dass der unverschlüsselte Port 2375 im internen Job-Netzwerk genutzt wird.

Als einfachere Alternative können Sie den gesamten services-Block und beide Variablen weglassen: Der Stackhero-Runner stellt bereits einen einsatzbereiten Docker-Daemon über einen gemounteten Socket zur Verfügung, sodass ein einfaches docker build direkt funktioniert.

Weitere Informationen zum Bauen von Docker-Images mit GitLab CI finden Sie in der offiziellen GitLab-Dokumentation.

Wenn Ihre Testsuite Testcontainers verwendet – eine Bibliothek, die reale Services (wie Datenbanken, Message Broker und mehr) als temporäre Docker-Container während der Testausführung startet –, ist die obige Konfiguration bereits ausreichend. Belassen Sie den Service docker:29-dind und beide Variablen: Testcontainers nutzt DOCKER_HOST, um den Docker-Daemon zu erreichen und sich mit den gestarteten Containern zu verbinden. Weitere Anpassungen sind nicht erforderlich.

Das Weglassen von DOCKER_HOST ist die häufigste Ursache für Testcontainers-Fehler in CI-Umgebungen. Die Bibliothek greift dann auf den vom Runner gemounteten Docker-Socket zurück und kann ihre eigenen Testcontainer nicht erreichen, was sich meist durch ein Timeout des Ryuk-Hilfscontainers äußert.