Pipelines aufteilen, teilen und wiederverwenden – über Projektgrenzen hinweg.
.gitlab-ci.yml wird unübersichtlich, und dieselbe Test-Logik in zehn Repos
zu kopieren ist Wartungs-Gift. include teilt Pipelines auf; CI/CD Components machen
daraus versionierte, geteilte Bausteine. So skaliert dein Workshop-Wissen auf viele Projekte.
Wann startet ein Job mit needs: []?
Leeres needs löst den Job aus den Stages – er startet sofort.
include: local | Datei aus demselben Repo |
include: project | Datei aus einem anderen GitLab-Projekt |
include: template | Mitgelieferte GitLab-Vorlage |
include: remote | Datei über eine HTTPS-URL |
include: component | versionierter, parametrisierbarer Baustein |
local)# .gitlab-ci.yml
include:
- local: .gitlab/ci/test.yml
- local: .gitlab/ci/deploy.yml
stages: [test, deploy]
Die Jobs leben in thematischen Dateien; die Haupt-.gitlab-ci.yml bleibt schlank und lesbar.
Ein Component ist eine wiederverwendbare Pipeline-Einheit mit Inputs und einer Version, veröffentlicht im CI/CD-Katalog. Du bindest ihn so ein:
include:
- component: $CI_SERVER_FQDN/puzzle/ci-components/python-test@1.2.0
inputs:
python_version: "3.13"
stage: test
$CI_SERVER_FQDN/ – wo der Component liegt.@1.2.0 – die Version (Tag, SHA, Branch oder ~latest). Pinnen
schützt vor überraschenden Änderungen.inputs: – Parameter, die der Component-Autor mit spec: inputs: definiert und
im Component per $[[ inputs.name ]] verwendet.@~latest oder ein Branch kann sich jederzeit ändern und deine Pipeline über Nacht brechen.
Pinne eine feste Version (@1.2.0 oder einen SHA) und aktualisiere bewusst.
spec: inputs:) haben Typen und Defaults und werden zur Pipeline-Erstellung
ausgewertet ($[[ inputs.x ]]) – nicht zur Laufzeit. Klarer Vertrag statt loser Variablen.
.gitlab-ci.yml ergänzt/überschreibt den eingebundenen. So passt du einen Component punktuell an.
include-Quellen werden eingelesen, bevor die Pipeline startet. Ist eine Quelle nicht
erreichbar oder fehlerhaft, entsteht gar keine Pipeline – nicht erst ein roter Job.
Aufgabe: Lagere alle Test-Jobs in .gitlab/ci/test.yml aus und binde sie
in der Hauptdatei ein.
include:
- local: .gitlab/ci/test.yml
Die Jobs ziehen in die ausgelagerte Datei; die Haupt-.gitlab-ci.yml verweist nur noch.
Frage: Ein Kollege bindet einen Component mit @main ein. Welches Risiko –
und die bessere Wahl?
@main ändert sich bei jedem Commit im Component-Repo – die Pipeline kann ohne
eigenes Zutun brechen. Besser: eine feste Version wie @1.2.0 pinnen.
Frage: Du willst die offizielle SAST-Vorlage von GitLab nutzen. Welcher
include-Typ?
include: template (z. B. Security/SAST.gitlab-ci.yml) – die
mitgelieferten GitLab-Vorlagen.
Was zeichnet einen CI/CD Component aus?
Components sind versioniert, parametrisierbar (inputs) und im Katalog teilbar.
Warum eine feste Component-Version pinnen?
@latest/Branch kann sich ändern und die Pipeline brechen – feste Version aktualisiert man bewusst.