Plugin: publisher-docker
@semrel/publisher-docker taggt und pusht ein Image, das bereits in einem Docker-kompatiblen Daemon vorhanden ist. Der kanonische typisierte Name ist erforderlich: @semrel/updater-docker behält die historischen untypisierten Docker-Aliase.
Installation
Abschnitt betitelt „Installation“Sobald das erste Plugin-Release verfügbar ist:
semrel plugin install @semrel/publisher-dockersemrel plugin install lädt die Binärdatei nach .semrel/plugins/ herunter und aktualisiert .semrel.lock. Committe .semrel.lock, um die Version für dein Team festzuschreiben.
Ausführung auf dem Host und Voraussetzungen
Abschnitt betitelt „Ausführung auf dem Host und Voraussetzungen“Führe semrel und das Plugin auf dem Host aus, der das gebaute Image besitzt. Das Plugin benötigt:
- eine
docker-CLI aufPATH; - einen erreichbaren Docker-kompatiblen Daemon, der das Quell-Image enthält;
- vor der Ausführung konfigurierte Registry-Authentifizierung, zum Beispiel über
docker loginoder einen CI-Credential-Helper.
Das Plugin nimmt keine Zugangsdaten entgegen und führt keinen Login aus. Wenn semrel in einem Container läuft, stelle die Docker-CLI bereit, mounte den Daemon-Socket ausdrücklich und mounte die passende Docker-Authentifizierungskonfiguration. Zugriff auf den Docker-Daemon-Socket entspricht praktisch Root-Zugriff auf den Host. Stelle ihn nur vertrauenswürdigen Jobs und Containern bereit.
Konfiguration
Abschnitt betitelt „Konfiguration“Baue das Image und authentifiziere dich, bevor semrel läuft:
docker build --tag acme-api:build .printf '%s' "$GHCR_TOKEN" | docker login ghcr.io --username "$GHCR_USER" --password-stdinsemrel releaseKonfiguriere die Release-Phase:
version: 1plugins: - uses: @semrel/publisher-docker phase: release args: image: acme-api:build ref: ghcr.io/acme/api:{version}Referenzen mit Registry-Ports werden unterstützt:
ref: registry.example:5000/team/api:{version}Konfiguration und Umgebungsvariablen
Abschnitt betitelt „Konfiguration und Umgebungsvariablen“Semrel bildet args.image und args.ref auf die Umgebung des Plugin-Subprozesses ab.
| Konfiguration / Variable | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
image / SEMREL_PLUGIN_IMAGE | ja | — | Vorhandene lokale Image-Referenz oder Image-ID. |
ref / SEMREL_PLUGIN_REF | ja | — | Getaggte Zielreferenz mit {version}. Digest-Ziele werden abgelehnt. |
SEMREL_VERSION | eine Versionsvariable | — | Release-Version. Hat Vorrang vor SEMREL_NEXT_VERSION. |
SEMREL_NEXT_VERSION | Fallback | — | Wird nur verwendet, wenn SEMREL_VERSION leer ist. |
SEMREL_DRY_RUN | nein | false | true oder 1 inspiziert und plant ohne Tag oder Push. |
Ein führendes v wird aus der Release-Version entfernt. SemVer-Build-Metadaten verwenden +, das in einem Docker-Tag ungültig ist. Deshalb wird + als _ kodiert. v1.4.0+build.7 wird beispielsweise zum Tag 1.4.0_build.7.
Leere Werte, CR/LF oder andere Steuerzeichen, nicht aufgelöste Platzhalter, Digest-Ziele, Ziele ohne expliziten Tag und ungültige Docker-Referenzen werden vor jeder Mutation abgelehnt.
Veröffentlichungsverhalten
Abschnitt betitelt „Veröffentlichungsverhalten“Bei jedem Aufruf:
- inspiziert das Plugin das Quell-Image;
- inspiziert es das Ziel und entscheidet, ob dessen Tag erstellt, ersetzt oder beibehalten werden muss;
- taggt es nur bei Bedarf;
- inspiziert es das Ziel erneut und prüft, dass es das Quell-Image bezeichnet;
- führt es genau einen
docker image pushaus; - meldet es eine vertrauenswürdige unveränderliche
repository@sha256:...-Referenz aus dem Push oder dem passendenRepoDigests-Eintrag.
Beispielausgabe:
publisher-docker: published ghcr.io/acme/api:1.4.0 as ghcr.io/acme/api@sha256:...Docker-Befehlsdiagnosen werden bereinigt statt wörtlich übernommen, damit Daemon- oder Registry-Fehler keine Zugangsdaten offenlegen.
Dry-Run-Verhalten
Abschnitt betitelt „Dry-Run-Verhalten“Ein direkter Plugin-Dry-Run benötigt weiterhin Docker-CLI, Daemon und Quell-Image. Er inspiziert Quelle und Ziel und meldet, ob der Tag erstellt, ersetzt oder beibehalten würde. Er taggt und pusht nie und erstellt daher weder einen lokalen Ziel-Tag noch ein entferntes Manifest.
SEMREL_PLUGIN_IMAGE=acme-api:build \SEMREL_PLUGIN_REF='ghcr.io/acme/api:{version}' \SEMREL_VERSION=v1.4.0 \SEMREL_DRY_RUN=true \semrel-plugin-publisher-dockerExplizite Nicht-Ziele
Abschnitt betitelt „Explizite Nicht-Ziele“Das MVP baut keine Images, meldet sich nicht an, signiert nicht, wiederholt keine Pushes, wendet keine Tag-Richtlinien an, erstellt keine Channel-Tags und setzt keine Multi-Plattform-Images/-Manifeste zusammen.