Forgejo Pipelines · Workshop Lektion 11 / Reuse

Reusable workflows & concurrency

Workflows teilen statt kopieren – und nie zweimal dasselbe gleichzeitig laufen lassen.

Warum das zählt
Wächst die Zahl der Repos, willst du denselben CI-Ablauf nicht überall kopieren. Reusable workflows machen einen Workflow zum Baustein, den andere aufrufen. concurrency verhindert, dass sich überlappende Läufe in die Quere kommen – etwa zwei Deploys gleichzeitig.

Einen Workflow zum Baustein machen

.forgejo/workflows/reusable-test.yaml
on:
  workflow_call:             # macht ihn aufrufbar
    inputs:
      python:
        type: string
        default: "3.12"
    secrets:
      token: { required: false }

jobs:
  test:
    runs-on: docker
    container: python:${{ inputs.python }}-slim
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements.txt && pytest -q

Den Baustein aufrufen

.forgejo/workflows/ci.yaml
jobs:
  call-test:
    uses: ./.forgejo/workflows/reusable-test.yaml
    with:
      python: "3.12"
    secrets: inherit      # oder gezielt einzelne weitergeben
Job ruft Workflow auf Ein aufrufender Job hat kein runs-on/steps – nur uses: auf den Workflow, plus with: und secrets:. Den Runner bestimmen die Jobs im aufgerufenen Workflow. So lassen sich auch Workflows aus anderen (öffentlichen) Repos einbinden: owner/repo/.forgejo/workflows/x.yaml@ref.

concurrency: Überlappung verhindern

concurrency:
  group: deploy-${{ forgejo.ref }}
  cancel-in-progress: true

Alle Läufe mit derselben group bilden eine Reihe. cancel-in-progress: true bricht einen noch laufenden Lauf ab, sobald ein neuer derselben Gruppe startet – ideal, damit nicht zwei Deploys desselben Branches kollidieren.

Parallelen: GitLab CI ↔ Forgejo Actions

GitLab CI

include: / CI-Components

Parameter via inputs: (spec)

resource_group / interruptible

Forgejo Actions

workflow_call + uses:

Parameter via inputs/secrets

concurrency + cancel-in-progress

Übungen für Teilnehmende

Übung 1 · Erkennen

Frage: Ein aufrufender Job hat uses:, aber kein runs-on. Ist das ein Fehler?

Lösung anzeigen

Nein – beim Aufruf einer reusable workflow entfällt runs-on. Den Runner wählen die Jobs im aufgerufenen Workflow.

Übung 2 · Selbst schreiben

Aufgabe: Sorge dafür, dass pro Branch immer nur ein CI-Lauf aktiv ist und ältere abgebrochen werden.

Lösung anzeigen
concurrency:
  group: ci-${{ forgejo.ref }}
  cancel-in-progress: true

Kurz prüfen (aus dem Kopf)

Was macht einen Workflow aufrufbar?

Wozu dient cancel-in-progress: true?

Primärquelle zum Lesen Forgejo Docs – Reference, Abschnitte workflow_call und concurrency.
Ich bin dein Teacher. Reusable workflow über Repos hinweg oder die richtige concurrency.group? Frag im Chat – wir schneiden den Baustein passend.
← Lektion 10 · Environments & Deployments Lektion 12 · Sicherheit →