0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Lekcja

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.sh

Przekazywanie 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 -u

Wymagane 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.

  • paths i paths-ignore sterują 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

  1. CI/CD dla monorepozytoriów
  2. Workflows między repozytoriami
  3. Centralne zarządzanie workflows
  4. Filtrowanie ścieżek i wybiórcze kompilacje
← Powrót do CI/CD with GitHub Actions & DevOps Pipelines