Tests über mehrere Python-Versionen, ohne den Job zu kopieren.
Welche Variable taugt am besten als Image-Tag?
Der Commit-SHA macht jedes Image eindeutig einem Code-Stand zuordenbar.
parallel: matrix nimmt eine Liste von Variablen-Sätzen. Für jede Kombination
erzeugt GitLab eine eigene Job-Instanz, die gleichzeitig läuft. Die Matrix-Variable kannst du überall im Job
verwenden – auch im image.
test:
stage: test
image: python:$PYTHON_VERSION-slim # Matrix-Variable im Image!
script:
- python --version
- pip install -r requirements.txt pytest
- pytest -q
parallel:
matrix:
- PYTHON_VERSION: ["3.11", "3.12", "3.13"]
Daraus werden drei Jobs: test: [3.11], test: [3.12],
test: [3.13] – parallel, jeder im passenden Python-Image.
parallel:
matrix:
- PYTHON_VERSION: ["3.12", "3.13"]
DB: ["postgres:15", "postgres:16"]
Zwei Python-Versionen × zwei DB-Versionen = vier parallele Jobs. Die Matrix wächst schnell – ein bewusster Punkt für den Workshop.
needs auf einzelne Instanzen zeigen
Ein späterer Job kann gezielt von einer Matrix-Variante abhängen, z. B.
needs: [{ job: test, parallel: { matrix: [{ PYTHON_VERSION: "3.13" }] } }]. (Mehr zu
needs in Lektion 11.)
Frage: PYTHON_VERSION hat 3 Werte, OS hat 2 Werte in derselben
Matrix-Zeile. Wie viele Jobs entstehen?
3 × 2 = 6 parallele Jobs (Kreuzprodukt aller Werte einer Matrix-Zeile).
Aufgabe: Baue eine Matrix, die pytest für Python 3.12 und 3.13 ausführt
und die Version im Image verwendet.
test:
image: python:$PY-slim
script: [pip install pytest, pytest -q]
parallel:
matrix:
- PY: ["3.12", "3.13"]Frage: Jemand will 5 Python- × 4 DB- × 3 OS-Versionen testen. Was ist das Problem und was wäre pragmatisch?
5×4×3 = 60 Jobs – teuer und langsam. Pragmatisch: alle Python-Versionen gegen eine DB/OS testen und nur die wichtigste Python-Version gegen die DB/OS-Varianten – nicht das volle Kreuzprodukt.
Was erzeugt parallel: matrix aus einem Job?
Pro Kombination eine parallele Instanz – mit eigenem Log und Ergebnis.
Was ist die Hauptgefahr grosser Matrizen?
Das Kreuzprodukt wächst multiplikativ – Matrix bewusst klein halten.
parallel:matrix.
needs auf eine einzelne Matrix-Instanz zeigt? Frag im Chat.