Werte einmal festlegen, überall nutzen – und ${{ … }} endlich verstehen.
| Quelle | Was | Zugriff |
|---|---|---|
env | Im Workflow definierte Umgebungsvariablen | $NAME oder ${{ env.NAME }} |
vars | Nicht-geheime Repo-/Org-Variablen (UI) | ${{ vars.NAME }} |
secrets | Geheimnisse (UI), maskiert in Logs | ${{ secrets.NAME }} |
env auf drei Ebenenon: [push]
env: # für ALLE Jobs
PYTHON_VERSION: "3.12"
jobs:
test:
runs-on: docker
container: python:${{ env.PYTHON_VERSION }}-slim
env: # nur für diesen Job
PYTEST_ADDOPTS: "-q"
steps:
- uses: actions/checkout@v4
- run: pytest
env: # nur für diesen Step
COVERAGE: "1"
Engere Ebenen gewinnen: Step-env überschreibt Job-env überschreibt Workflow-env.
${{ … }} wird vor der Ausführung von Forgejo ersetzt (im YAML-Wert).
$NAME löst die Shell zur Laufzeit auf (im run:). Für
Umgebungsvariablen sind beide okay – aber Kontexte wie ${{ secrets.X }} gibt es nur
in der ${{ }}-Form.
Forgejo hat kein GitLab-extends. Stattdessen helfen YAML-Anker für
kleine Wiederholungen – und für echte Wiederverwendung über Workflows hinweg gibt es
reusable workflows (Lektion 11):
defaults: # gemeinsame run-Einstellungen
run:
shell: bash
jobs:
test:
runs-on: docker
container: &img python:3.12-slim # Anker definieren
lint:
runs-on: docker
container: *img # Anker wiederverwenden
variables: global/job
Wiederverwenden via extends / !reference
$CI_…-Variablen
env: + vars/secrets-Kontext
Wiederverwenden via YAML-Anker / reusable workflows
$FORGEJO_…-Variablen
Frage: Workflow-env setzt LOG=info, der Step-env
setzt LOG=debug. Welchen Wert sieht der Befehl im Step?
debug – die engste Ebene (Step) gewinnt.
Aufgabe: Lege eine Repo-Variable IMAGE_TAG an (UI) und nutze sie
im Workflow als Teil eines Echo-Befehls.
- run: echo "Baue Tag ${{ vars.IMAGE_TAG }}"
vars.* kommt aus Repo & Settings → Actions → Variables.
Für Geheimes nimmst du secrets.* – sonst identisch.
Womit liest du ein Secret in einem Workflow?
Secrets gibt es nur als ${{ secrets.* }}-Kontext. vars ist für
nicht-geheime Werte.
Welche env-Ebene hat Vorrang?
Step überschreibt Job überschreibt Workflow. Die spezifischste Definition gewinnt.
env und „Contexts" (vars, secrets, env).
$NAME vs. ${{ }}? Frag im Chat –
mit einem konkreten Beispiel wird der Unterschied schnell klar.