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_SECRETmuss 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_CAPACITYlegt 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überfrom_secretreferenzieren.