Wohin deployt wird, manuelle Freigaben – und GitLab Pages als greifbares Ziel.
when: manual gibt dir den
Finger auf dem Auslöser für Produktion. Als sichtbares Beispiel deployen wir die Coverage-Reports nach
GitLab Pages.
Was erzeugt eine Matrix mit 2 × 3 Werten?
Kreuzprodukt: 2 × 3 = 6 parallele Jobs.
Das Keyword environment markiert einen Job als Deployment in eine benannte Umgebung. GitLab
führt darüber Buch: In der UI siehst du unter Operate → Environments, welcher Commit gerade auf
staging bzw. production läuft – inklusive Rollback-Knopf.
deploy-staging:
stage: deploy
script:
- ./deploy.sh staging
environment:
name: staging
url: https://staging.tasks.example.com
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
deploy-production:
stage: deploy
script:
- ./deploy.sh production
environment:
name: production
url: https://tasks.example.com
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: manual # Produktion nur auf Knopfdruck
when: manual macht aus dem Job einen Play-Button in der Pipeline – nichts
geht nach Prod, bis ein Mensch klickt.
GitLab Pages hostet statische Dateien gratis. Die Regel: ein Job namens pages, dessen Artifact
einen Ordner public/ enthält. Wir veröffentlichen den HTML-Coverage-Report:
pages:
stage: deploy
script:
- pip install -r requirements.txt pytest pytest-cov
- pytest --cov=app --cov-report=html:public # HTML-Report nach public/
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Nach dem Lauf ist der Report unter der Pages-URL deines Projekts erreichbar – sichtbares Ergebnis, das im Workshop immer zündet.
public sind Pflicht
Der Job muss pages heissen und die Dateien müssen im Ordner
public/ als Artifact liegen. Heisst der Ordner site/ oder der Job
deploy-docs, passiert nichts.
when: manual-Job ist standardmässig nicht blockierend (die Pipeline gilt auch ohne
Klick als erfolgreich). Soll Prod ein echtes Gate sein, kombiniere mit allow_failure: false –
dann wartet die Pipeline auf die Freigabe.
environment: name: review/$CI_COMMIT_REF_SLUG bekommt jeder Feature-Branch eine eigene
Review-Umgebung. Mächtig – aber bewusst einsetzen, sonst sammeln sich viele Umgebungen an.
Szenario: Ein Job deploy-docs legt HTML in site/ und nichts
erscheint auf Pages. Zwei Fehler?
(1) Der Job muss pages heissen. (2) Der Output muss als Artifact im Ordner
public/ liegen, nicht site/.
Aufgabe: Mach das Production-Deploy zu einem echten Gate, das die Pipeline blockiert, bis jemand freigibt.
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: manual
allow_failure: false
allow_failure: false macht den manuellen Job blockierend – die Pipeline wartet.
Frage: Wozu die url: im environment-Block?
GitLab zeigt sie als anklickbaren „View deployment"-Link in MR und Environments-Ansicht – direkter Sprung zur laufenden Umgebung. Reine Bequemlichkeit, aber im Alltag sehr nützlich.
Was macht when: manual mit einem Job?
Manuelle Jobs warten auf einen menschlichen Play-Klick – ideal für Produktion.
Was braucht ein GitLab-Pages-Deploy zwingend?
Konvention: Job heisst pages, Output liegt als Artifact in public/.