Vom grünen Build zum gezielten Deploy – kontrolliert, nicht bei jedem Commit.
needs, if und workflow_dispatch.
on:
push: { branches: [main] }
workflow_dispatch: # manueller Deploy-Knopf
jobs:
deploy:
runs-on: docker
needs: [image] # erst nach erfolgreichem Build
if: ${{ forgejo.ref == 'refs/heads/main' }}
environment: production # protokolliert das Ziel
steps:
- run: ./deploy.sh "${{ needs.image.outputs.tag }}"
environment: wird akzeptiert und das Deployment protokolliert – aber die
von GitHub bekannten Protection Rules (Pflicht-Reviewer, Wartezeiten) sind in Forgejo nur
eingeschränkt bzw. nicht überall verfügbar. Verlass dich für „kontrolliertes Deployen" auf das
Muster oben: Branch-Filter (if), Abhängigkeit (needs) und den manuellen
workflow_dispatch-Knopf.
Soll ein Mensch entscheiden, lässt du den Deploy nur über workflow_dispatch zu
und nimmst den automatischen Push-Trigger heraus. Dann erscheint im Actions-Tab ein „Run"-Knopf,
optional mit inputs (z. B. Ziel-Umgebung als Auswahl).
secrets. Achte darauf, dass der Deploy-Job nicht aus
Fork-PRs heraus läuft (Lektion 12) – sonst sind Geheimnisse potenziell exponiert.
environment: mit Deployment-Tracking
when: manual für Freigaben
Protected environments & approvals
environment: (eingeschränkt) ★
workflow_dispatch für Freigaben
Schutz über if/Branch/Token
Frage: Deploy soll nur passieren, wenn (a) der Build grün ist und (b) ein Mensch es auslöst. Welche zwei Bausteine kombinierst du?
needs: [image] für (a) und workflow_dispatch als
einzigen Trigger für (b). Der automatische Push-Trigger fällt weg.
Aufgabe: Gib dem manuellen Deploy ein Eingabefeld ziel mit den
Optionen staging und production.
on:
workflow_dispatch:
inputs:
ziel:
type: choice
options: [staging, production]
Im Job liest du es als ${{ inputs.ziel }}.
Wie baust du in Forgejo eine manuelle Freigabe?
workflow_dispatch liefert den Knopf. when: manual ist GitLab;
Protection Rules sind in Forgejo nur eingeschränkt.
Worauf verlässt du dich für „nur von main deployen"?
environment: protokolliert nur. Die Bedingung erzwingt der if-Filter
(plus needs).