Drone - CI-CD-Pipelines mit Docker automatisieren

Drone - CI-CD-Pipelines mit Docker automatisieren

Drone ist ein selbstgehostetes, container-natives CI/CD-System, das Pipelines als YAML-Dateien im Repository definiert und in Docker-Containern ausführt.

Was ist Drone?

Drone verfolgt einen „Pipeline as Code"-Ansatz: Jede .drone.yml-Datei im Git-Repository beschreibt die Build-, Test- und Deployment-Schritte. Jeder Schritt läuft in einem eigenen Docker-Container – komplett isoliert und reproduzierbar. Drone integriert sich mit GitHub, GitLab, Gitea und Bitbucket und startet Pipelines automatisch bei jedem Push oder Pull Request. Die Architektur trennt Server (Koordination) und Runner (Ausführung), was horizontales Skalieren ermöglicht.

Voraussetzungen

  • Docker 20.10+ oder Docker Compose
  • Gitea, GitHub oder GitLab als Quellcode-Verwaltung
  • OAuth-App auf der Git-Plattform (für Login und Webhooks)

Compose-Beispiel

services:
  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    restart: unless-stopped
    ports:
      - "3000:80"
    volumes:
      - ./data:/data
    environment:
      - DRONE_GITEA_SERVER=https://gitea.example.com
      - DRONE_GITEA_CLIENT_ID=oauth_client_id
      - DRONE_GITEA_CLIENT_SECRET=oauth_client_secret
      - DRONE_RPC_SECRET=gemeinsames_rpc_geheimnis
      - DRONE_SERVER_HOST=ci.example.com
      - DRONE_SERVER_PROTO=https

  drone-runner:
    image: drone/drone-runner-docker:latest
    container_name: drone-runner
    restart: unless-stopped
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone-server
      - DRONE_RPC_SECRET=gemeinsames_rpc_geheimnis
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=local-runner

Hinweise

  • DRONE_RPC_SECRET muss auf Server und Runner identisch sein – er sichert die interne Kommunikation.
  • Für Gitea muss eine OAuth2-Anwendung in Gitea unter „Einstellungen > Anwendungen" angelegt werden.
  • DRONE_RUNNER_CAPACITY legt fest, wie viele Pipelines der Runner gleichzeitig ausführen darf.
  • Pipelines können Geheimnisse (Secrets) sicher über die Drone-Oberfläche speichern und in .drone.yml über from_secret referenzieren.