5.7 KiB
🚀 Drone Publish Tool
Ein leichtgewichtiges CI-Tool auf Basis von Alpine Linux, das in einer Drone CI-Pipeline automatisch:
Das Tool vereinfacht den gesamten Veröffentlichungsprozess — von der Signierung bis zum Release —
und funktioniert sowohl innerhalb von Drone als auch manuell.
🧩 Features
- ✅ Automatisches Signieren von Container-Images via Cosign
- ✅ Automatische Release-Erstellung in Gitea
- ✅ Vollständig über Umgebungsvariablen steuerbar (ideal für Drone Secrets)
- ✅ Kompatibel mit privaten Docker-Registries (z. B. Zot, Harbor, etc.)
- ✅ Minimal, sicher, portabel – basiert auf Alpine Linux
⚙️ Voraussetzungen
- Drone CI ist mit Gitea verbunden (z. B. via OAuth oder Token).
- Dein Docker-Image ist bereits gebaut und in der Registry verfügbar.
- Du hast die unten genannten Secrets in Drone hinterlegt.
- Für die Signierung ist ein Cosign-Schlüssel vorhanden (siehe unten).
🔐 Erforderliche Secrets
| Secret Name | Beschreibung | Beispielwert |
|---|---|---|
REGISTRY_URL |
Basis-URL deiner Registry | registry.example.com |
DOCKER_USER |
Benutzername für Registry-Login | ci-user |
DOCKER_PASS |
Passwort oder Token für Registry | changeme123 |
COSIGN_KEY |
Inhalt des privaten Cosign-Schlüssels (nicht der Pfad!) | -----BEGIN ENCRYPTED PRIVATE KEY-----... |
COSIGN_PASSWORD |
Passwort für den Cosign-Schlüssel (kann leer sein) | (leer) |
GITEA_URL |
Basis-URL deines Gitea-Servers | https://gitea.example.com |
GITEA_TOKEN |
Personal Access Token für Gitea API | ghp_abc123tokenxyz |
🔑 Cosign-Schlüssel erzeugen
Falls du noch keinen Cosign-Schlüssel hast, kannst du ihn einfach per Docker erzeugen:
docker run --rm -v $(pwd):/keys \
-e COSIGN_PASSWORD="meinpasswort" \
gcr.io/projectsigstore/cosign:latest generate-key-pair
Danach findest du zwei Dateien:
- 🗝️
cosign.key→ Privater Schlüssel (als SecretCOSIGN_KEYin Drone hinterlegen) - 🔓
cosign.pub→ Öffentlicher Schlüssel (optional in Zot für Signaturprüfung hinterlegen)
⚡ Beispiel: Verwendung in Drone CI
Nach erfolgreichem Build kann das Tool als separater Step eingebunden werden,
um das erstellte Image zu signieren und in Gitea automatisch als Release zu veröffentlichen.
kind: pipeline
type: docker
name: release
steps:
- name: build
image: docker:26
privileged: true
environment:
REGISTRY_URL:
from_secret: REGISTRY_URL
DOCKER_USER:
from_secret: DOCKER_USER
DOCKER_PASS:
from_secret: DOCKER_PASS
volumes:
- name: docker_sock
path: /var/run/docker.sock
commands:
- docker login $REGISTRY_URL -u "$DOCKER_USER" -p "$DOCKER_PASS"
- docker build -t $REGISTRY_URL/public/myapp:$DRONE_BUILD_NUMBER .
- docker push $REGISTRY_URL/public/myapp:$DRONE_BUILD_NUMBER
- echo "IMAGE_FULL=$REGISTRY_URL/public/myapp:$DRONE_BUILD_NUMBER" >> build.env
- echo "VERSION_TAG=v$DRONE_BUILD_NUMBER" >> build.env
- name: publish
image: registry.example.com/public/drone-publish-tool:latest
environment:
COSIGN_KEY:
from_secret: COSIGN_KEY
COSIGN_PASSWORD:
from_secret: COSIGN_PASSWORD
GITEA_URL:
from_secret: GITEA_URL
GITEA_TOKEN:
from_secret: GITEA_TOKEN
REGISTRY_URL:
from_secret: REGISTRY_URL
DOCKER_USER:
from_secret: DOCKER_USER
DOCKER_PASS:
from_secret: DOCKER_PASS
commands:
- . build.env
- export GITEA_REPO="$DRONE_REPO_OWNER/$DRONE_REPO_NAME"
- /usr/local/bin/entrypoint.sh
volumes:
- name: docker_sock
host:
path: /var/run/docker.sock
💡 Hinweis:
IMAGE_FULL und VERSION_TAG werden aus dem Build-Step übernommen,
damit das Tool weiß, welches Image signiert und welcher Release erstellt werden soll.
🧰 Beispiel: Manuelle Nutzung
Du kannst das Tool auch außerhalb von Drone direkt ausführen,
z. B. zum Testen oder für manuelle Releases:
docker run --rm \
-e IMAGE_FULL=registry.example.com/public/myapp:v42 \
-e VERSION_TAG=v42 \
-e COSIGN_KEY="$(cat cosign.key)" \
-e COSIGN_PASSWORD="" \
-e GITEA_URL=https://gitea.example.com \
-e GITEA_TOKEN=ghp_abc123tokenxyz \
-e GITEA_REPO=patrick/myapp \
registry.example.com/public/drone-publish-tool:latest
Damit signierst du das Image myapp:v42 und erzeugst gleichzeitig ein Release in Gitea.
Das funktioniert auch ohne Drone CI – ideal zum Testen oder Troubleshooting.
📦 Image-Metadaten (OCI Labels)
Das Tool bringt vollständige OCI Labels mit,
damit es in Registries wie Zot oder Harbor korrekt beschrieben angezeigt wird:
| Label | Beschreibung |
|---|---|
org.opencontainers.image.title |
Drone Publish Tool |
org.opencontainers.image.description |
Automatisiertes Drone CI Tool zum Signieren und Erstellen von Gitea-Releases |
org.opencontainers.image.version |
1.0.0 |
org.opencontainers.image.vendor |
Buchhorster IT |
org.opencontainers.image.source |
https://gitea.buchhorster.de/patrick/drone-publish-tool |
org.opencontainers.image.licenses |
MIT |
🧾 Lizenz
MIT License
© 2025 Patrick Buchhorst / Buchhorster IT
🧩 Changelog
| Version | Änderungen |
|---|---|
1.0.0 |
Erste Version mit Image-Signing (Cosign) und Gitea-Release-Funktion |