Pfadfilterung und selektive Builds
Starten Sie nur die von einer Änderung betroffenen Workflows und Jobs mithilfe von Pfadfiltern, Änderungserkennung und bedingten Matrizen in Monorepos und Multi-Repo-Setups.
Pfadfilterung und selektive Builds ist eine kostenlose DevOps Bootcamp-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des DevOps Bootcamp-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.
Das Problem verschwendeter Builds
In einem Monorepo sollte eine Änderung an der Dokumentation nicht dazu führen, dass Backend, Frontend und mobile App neu erstellt und bereitgestellt werden.
Selektive Builds führen nur die von einer Änderung betroffenen Teile der Pipeline aus und sparen dadurch Zeit und Runner-Minuten.
Pfadfilter für Trigger
Der einfachste Ansatz ist der paths-Filter am Trigger. Ein Workflow wird nur ausgeführt, wenn sich Dateien ändern, die dem Muster entsprechen.
on:
push:
paths:
- 'services/api/**'Pfade ignorieren
Mit paths-ignore können Sie auch das Gegenteil festlegen: Der Workflow wird für alles ausgeführt, außer für die aufgelisteten Pfade.
Das ist praktisch, um CI bei Änderungen ausschließlich an der Dokumentation zu überspringen.
on:
push:
paths-ignore:
- 'docs/**'
- '**.md'Grenzen von Trigger-Filtern
Filter auf Trigger-Ebene entscheiden, ob der gesamte Workflow ausgeführt wird. In einem Monorepo möchten Sie jedoch häufig einen Workflow, der entscheidet, welche Jobs ausgeführt werden.
Dazu erkennen Sie Änderungen innerhalb des Workflows und verzweigen anhand des Ergebnisses.
Aktion zur Änderungserkennung
Die Aktion dorny/paths-filter untersucht den Diff und gibt für jede benannte Pfadgruppe boolesche Werte aus.
Spätere Jobs lesen diese Ausgaben, um zu entscheiden, ob sie ausgeführt werden.
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
api:
- 'services/api/**'
web:
- 'services/web/**'Jobs anhand erkannter Änderungen steuern
Ein Erkennungsjob stellt Ausgaben bereit. Nachgelagerte Jobs verwenden if mit dem needs-Kontext, um bedingt ausgeführt zu werden.
build-api:
needs: detect
if: needs.detect.outputs.api == 'true'
runs-on: ubuntu-latest
steps:
- run: ./build-api.shAusgaben verknüpfen
Der Erkennungsjob muss outputs deklarieren, die die Filterergebnisse weitergeben, damit andere Jobs sie lesen können.
detect:
runs-on: ubuntu-latest
outputs:
api: ${{ steps.changes.outputs.api }}
web: ${{ steps.changes.outputs.web }}Dynamische Matrizen
Für viele Services können Sie eine Matrix dynamisch aus den geänderten Pfaden erstellen, sodass nur geänderte Services in die Matrix aufgenommen werden.
Erzeugen Sie in einem Job eine JSON-Liste und übergeben Sie sie an die Matrix des nächsten Jobs.
strategy:
matrix:
service: ${{ fromJSON(needs.detect.outputs.list) }}Git-Diff zur Erkennung
Sie können Änderungen auch mit dem unverarbeiteten Git ermitteln. Vergleichen Sie den aktuellen Commit mit der Basis, um geänderte Verzeichnisse aufzulisten.
git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -uErforderliche Prüfungen und Überspringen
Achtung: Wenn eine erforderliche Statusprüfung übersprungen wird, weil sich nichts geändert hat, kann der Branch-Schutz den Merge blockieren und auf diese Prüfung warten.
Die Lösung ist ein abschließender Gate-Job, der immer erfolgreich ist und die einzige erforderliche Prüfung darstellt, indem er die bedingten Jobs zusammenfasst.
gate:
needs: [build-api, build-web]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo 'all required jobs resolved'Caching pro Paket
Selektive Builds lassen sich gut mit Caches pro Paket kombinieren. Verwenden Sie die Lockdatei jedes Services als Cache-Schlüssel, damit unabhängige Änderungen den Cache nicht ungültig machen.
Zusammen halten sie Monorepo-Pipelines auch bei wachsendem Repository schnell.
Kurzer Test
Testen Sie Ihr Verständnis selektiver Builds.
Zusammenfassung
Sie haben gelernt, nur das zu bauen, was sich geändert hat.
pathsundpaths-ignoresteuern gesamte Workflows- Aktionen zur Änderungserkennung geben boolesche Werte pro Pfad aus
- Jobs verwenden
if+needs, um bedingt ausgeführt zu werden, und Matrizen können dynamisch erstellt werden - Fügen Sie einen
always()-Gate-Job hinzu, damit erforderliche Prüfungen kompatibel bleiben
Selektive Builds halten Monorepo-CI/CD schnell und kostengünstig.
Häufig gestellte Fragen
Ist die Lektion „Pfadfilterung und selektive Builds“ kostenlos?
Ja — der vollständige Text von „Pfadfilterung und selektive Builds“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des DevOps Bootcamp-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Pfadfilterung und selektive Builds“?
Starten Sie nur die von einer Änderung betroffenen Workflows und Jobs mithilfe von Pfadfiltern, Änderungserkennung und bedingten Matrizen in Monorepos und Multi-Repo-Setups. Du übst DevOps Bootcamp mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um DevOps Bootcamp zu starten?
Keine Vorkenntnisse erforderlich. DevOps Bootcamp auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Pfadfilterung und selektive Builds“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser DevOps Bootcamp-Lektion Code schreiben und ausführen?
Ja. Jede DevOps Bootcamp-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- CI/CD für Monorepos
- Repositoryübergreifende Workflows
- Zentrale Workflow-Verwaltung
- Pfadfilterung und selektive Builds