Forgejo Pipelines · Workshop Lektion 10 / Deploy

Environments & Deployments

Vom grünen Build zum gezielten Deploy – kontrolliert, nicht bei jedem Commit.

Warum das zählt
Deployen will man bewusst: das richtige Ziel, der richtige Branch, oft ein menschlicher Knopf. Forgejo hat (noch) keine so ausgebaute Environment-Verwaltung wie GitHub – umso wichtiger ist das robuste Muster aus needs, if und workflow_dispatch.

Das verlässliche Deploy-Muster

.forgejo/workflows/deploy.yaml
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-Schutzregeln sind begrenzt Der Schlüssel 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.

Manuelle Freigabe

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).

Deploy-Secrets gehören geschützt Zugangsdaten fürs Ziel liegen als secrets. Achte darauf, dass der Deploy-Job nicht aus Fork-PRs heraus läuft (Lektion 12) – sonst sind Geheimnisse potenziell exponiert.

Parallelen: GitLab CI ↔ Forgejo Actions

GitLab CI

environment: mit Deployment-Tracking

when: manual für Freigaben

Protected environments & approvals

Forgejo Actions

environment: (eingeschränkt) ★

workflow_dispatch für Freigaben

Schutz über if/Branch/Token

Übungen für Teilnehmende

Übung 1 · Entwerfen

Frage: Deploy soll nur passieren, wenn (a) der Build grün ist und (b) ein Mensch es auslöst. Welche zwei Bausteine kombinierst du?

Lösung anzeigen

needs: [image] für (a) und workflow_dispatch als einzigen Trigger für (b). Der automatische Push-Trigger fällt weg.

Übung 2 · Selbst schreiben

Aufgabe: Gib dem manuellen Deploy ein Eingabefeld ziel mit den Optionen staging und production.

Lösung anzeigen
on:
  workflow_dispatch:
    inputs:
      ziel:
        type: choice
        options: [staging, production]

Im Job liest du es als ${{ inputs.ziel }}.

Kurz prüfen (aus dem Kopf)

Wie baust du in Forgejo eine manuelle Freigabe?

Worauf verlässt du dich für „nur von main deployen"?

Primärquelle zum Lesen Forgejo Docs – Reference (Job-Keys environment, if) sowie Actions-Übersicht.
Ich bin dein Teacher. Unsicher, wie streng Forgejo-Environments wirklich schützen? Frag im Chat – wir bauen ein Muster, das auf deiner Instanz verlässlich greift.
← Lektion 9 · strategy:matrix Lektion 11 · Reusable workflows →