Filtrowanie ścieżek i wybiórcze kompilacje
Uruchamiaj wyłącznie workflow i zadania, których dotyczy zmiana, korzystając z filtrów ścieżek, wykrywania zmian i warunkowych macierzy w monorepozytoriach oraz konfiguracjach wielorepozytorycznych.
Filtrowanie ścieżek i wybiórcze kompilacje to bezpłatna lekcja CI/CD with GitHub Actions & DevOps Pipelines na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej CI/CD with GitHub Actions & DevOps Pipelines, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CI/CD with GitHub Actions & DevOps Pipelines zawiera 4 lekcji w sumie.
Problem zmarnowanych kompilacji
W monorepo zmiana w dokumentacji nie powinna powodować ponownej kompilacji i ponownego wdrożenia backendu, frontendu ani aplikacji mobilnej.
Selektywne kompilacje uruchamiają tylko te części potoku, których dotyczy zmiana, oszczędzając czas i minuty runnera.
Filtry ścieżek w wyzwalaczach
Najprostsze podejście to filtr paths w wyzwalaczu. Workflow uruchamia się tylko wtedy, gdy zmienią się pliki pasujące do wzorca.
on:
push:
paths:
- 'services/api/**'Ignorowanie ścieżek
Możesz też użyć odwrotnego podejścia za pomocą paths-ignore: uruchamiać workflow dla wszystkiego poza wymienionymi ścieżkami.
Jest to przydatne do pomijania CI w przypadku zmian dotyczących wyłącznie dokumentacji.
on:
push:
paths-ignore:
- 'docs/**'
- '**.md'Ograniczenia filtrów wyzwalaczy
Filtry na poziomie wyzwalacza decydują, czy uruchomić cały workflow. W monorepo często potrzebujesz jednak jednego workflow, który zdecyduje, które zadania uruchomić.
W tym celu wykryj zmiany wewnątrz workflow i wybierz odpowiednią gałąź na podstawie wyniku.
Akcja wykrywania zmian
Akcja dorny/paths-filter analizuje różnice i zwraca wartości logiczne dla każdej nazwanej grupy ścieżek.
Późniejsze zadania odczytują te wyniki, aby zdecydować, czy należy je uruchomić.
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
api:
- 'services/api/**'
web:
- 'services/web/**'Warunkowe uruchamianie zadań na podstawie wykrytych zmian
Zadanie wykrywające udostępnia wyniki wyjściowe, a zadania zależne używają if wraz z kontekstem needs, aby uruchamiać się warunkowo.
build-api:
needs: detect
if: needs.detect.outputs.api == 'true'
runs-on: ubuntu-latest
steps:
- run: ./build-api.shPrzekazywanie wyników
Zadanie wykrywające musi zadeklarować outputs, które przekazują wyniki filtra, aby inne zadania mogły je odczytać.
detect:
runs-on: ubuntu-latest
outputs:
api: ${{ steps.changes.outputs.api }}
web: ${{ steps.changes.outputs.web }}Dynamiczne macierze
W przypadku wielu usług możesz dynamicznie utworzyć macierz na podstawie zmienionych ścieżek, tak aby do macierzy trafiły tylko zmienione usługi.
Wygeneruj listę JSON w jednym zadaniu i przekaż ją do macierzy następnego zadania.
strategy:
matrix:
service: ${{ fromJSON(needs.detect.outputs.list) }}Git Diff do wykrywania zmian
Zmiany możesz również wykrywać za pomocą surowego gita. Porównaj bieżący commit z bazą, aby wyświetlić listę zmienionych katalogów.
git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -uWymagane kontrole i pomijanie zadań
Uwaga: jeśli wymagana kontrola statusu zostanie pominięta, ponieważ nic się nie zmieniło, ochrona gałęzi może zablokować scalanie i oczekiwać na jej wykonanie.
Rozwiązaniem jest dodanie końcowego zadania bramki, które zawsze kończy się powodzeniem i jest jedyną wymaganą kontrolą, podsumowującą zadania warunkowe.
gate:
needs: [build-api, build-web]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo 'all required jobs resolved'Buforowanie według pakietu
Selektywne kompilacje dobrze współpracują z buforami dla poszczególnych pakietów. Twórz klucz bufora na podstawie pliku blokad każdej usługi, aby niepowiązane zmiany go nie unieważniały.
Wspólnie pozwalają utrzymać szybkość potoków monorepo nawet wraz z rozrostem repozytorium.
Szybkie sprawdzenie
Sprawdź swoje zrozumienie selektywnych kompilacji.
Podsumowanie
Nauczyłeś się kompilować tylko to, co się zmieniło.
pathsipaths-ignoresterują uruchamianiem całych workflow- Akcje wykrywające zmiany zwracają wartości logiczne dla poszczególnych ścieżek
- Zadania używają
if+needs, aby uruchamiać się warunkowo, a macierze mogą być tworzone dynamicznie - Dodaj zadanie bramki z
always(), aby zapewnić zgodność z wymaganymi kontrolami
Selektywne kompilacje sprawiają, że CI/CD w monorepo działa szybko i oszczędnie.
Często zadawane pytania
Czy lekcja „Filtrowanie ścieżek i wybiórcze kompilacje” jest bezpłatna?
Tak — pełny tekst „Filtrowanie ścieżek i wybiórcze kompilacje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu CI/CD with GitHub Actions & DevOps Pipelines, przejdź na CoddyKit PRO. Kurs CI/CD with GitHub Actions & DevOps Pipelines zawiera 4 lekcji w sumie.
Co nauczysz się w „Filtrowanie ścieżek i wybiórcze kompilacje”?
Uruchamiaj wyłącznie workflow i zadania, których dotyczy zmiana, korzystając z filtrów ścieżek, wykrywania zmian i warunkowych macierzy w monorepozytoriach oraz konfiguracjach wielorepozytorycznych. Ćwiczysz CI/CD with GitHub Actions & DevOps Pipelines z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć CI/CD with GitHub Actions & DevOps Pipelines?
Nie wymagamy żadnego doświadczenia. CI/CD with GitHub Actions & DevOps Pipelines w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Filtrowanie ścieżek i wybiórcze kompilacje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji CI/CD with GitHub Actions & DevOps Pipelines?
Tak. Każda lekcja CI/CD with GitHub Actions & DevOps Pipelines zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- CI/CD dla monorepozytoriów
- Workflows między repozytoriami
- Centralne zarządzanie workflows
- Filtrowanie ścieżek i wybiórcze kompilacje