Jobs starten, sobald ihre Voraussetzung fertig ist – nicht der ganze Stage.
needs baust du einen gerichteten Abhängigkeitsgraphen (DAG) – Jobs starten früher, die Pipeline
wird spürbar schneller. Genau das, was grosse Pipelines erträglich macht.
Was braucht ein GitLab-Pages-Deploy?
Konvention: Job pages + Artifact in public/.
Angenommen: lint → test → build → deploy.
Der build-Job hängt eigentlich nur von test ab, nicht von lint.
Trotzdem wartet er, bis der ganze test-Stage (inkl. langsamem mypy) fertig ist.
needs durchbricht das.
needs richtet sich der Start nach echten Abhängigkeiten – nicht nach der Stage-Grenze..gitlab-ci.ymlpytest:
stage: test
script: [pytest -q]
mypy:
stage: test
script: [mypy app]
build:
stage: build
needs: ["pytest"] # startet, sobald pytest grün ist – ignoriert mypy
script: [python -m build]
needs + Artifacts
Standardmässig lädt ein Job die Artifacts aller vorigen Stages. Mit needs bekommt er
nur die Artifacts der genannten Jobs. Das ist meist gewünscht – aber eine bewusste Änderung:
deploy:
stage: deploy
needs:
- job: build
artifacts: true # Wheel aus build übernehmen
script: [./deploy.sh]
needs: [] = sofort starten
needs: [] löst einen Job aus den Stages: Er startet ganz am Anfang, parallel zu allem. Praktisch
für einen schnellen Vorab-Check, der nichts braucht.
needs nutzt, bekommt er nur noch die Artifacts der genannten Jobs – nicht
mehr automatisch alle vorigen. Fehlt plötzlich eine Datei, ist das oft die Ursache.
Aufgabe: build soll starten, sobald pytest fertig ist, ohne auf
den langsamen mypy (gleicher Stage) zu warten.
build:
stage: build
needs: ["pytest"]
build hängt jetzt nur an pytest; mypy läuft unabhängig weiter.
Frage: build hat needs: ["pytest"]. mypy schlägt
fehl, pytest ist grün. Läuft build?
Ja. build braucht nur pytest – der ist grün. Der rote
mypy lässt aber die Gesamtpipeline rot werden. (Mit allow_failure liesse
sich das entkoppeln.)
Frage: Du willst einen secret-scan, der unabhängig von allem ganz früh
startet. Wie?
needs: [] (leer). Damit ignoriert der Job die Stage-Reihenfolge und startet
sofort parallel zum Pipeline-Beginn.
Was bewirkt needs an einem Job?
needs richtet den Start nach echten Abhängigkeiten – früher als die Stage-Grenze.
Was ändert needs an den Artifacts?
Mit needs bekommt der Job nur die Artifacts der aufgeführten Jobs.
needs und
Directed Acyclic Graph.