CI/CD dla monorepozytoriów
Poznają Państwo strategie optymalizacji potoków CI/CD w monorepozytoriach, w tym selektywne uruchamianie zadań na podstawie zmienionych plików.
CI/CD dla monorepozytoriów to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 1 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 DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Czym jest monorepo?
Monorepo to pojedyncze repozytorium zawierające kod wielu projektów lub aplikacji. Zamiast przechowywać każdą usługę lub bibliotekę w osobnym repozytorium, umieszcza się je wszystkie razem.
Można wyobrazić je sobie jako dużą bibliotekę z wieloma książkami (projektami) w jednym budynku (repozytorium), zamiast osobnego budynku dla każdej książki. Takie podejście ma zalety i wady, szczególnie w kontekście CI/CD.
Wyzwania CI/CD w monorepo
Monorepo ułatwia między innymi współdzielenie kodu, ale może stwarzać wyzwania dla potoków Continuous Integration/Continuous Delivery (CI/CD):
- Powolne kompilacje: jeśli każda zmiana uruchamia pełną kompilację i zestaw testów dla *wszystkich* projektów, potoki stają się bardzo powolne.
- Marnowanie zasobów: niepotrzebne uruchamianie niezwiązanych zadań zużywa minuty kompilacji i zasoby.
- Frustracja programistów: długi czas oczekiwania na informację zwrotną może spowalniać tempo tworzenia oprogramowania.
Potrzeba selektywnego CI/CD
Kluczem do wydajnego CI/CD w monorepo jest selektywność. Chcemy, aby nasze potoki potrafiły:
- identyfikować, *co* się zmieniło;
- uruchamiać zadania CI/CD *tylko* dla projektów, których dotyczą te zmiany.
Takie podejście oszczędza czas, ogranicza zużycie zasobów i zapewnia programistom szybszą informację zwrotną.
Wyzwalanie na podstawie ścieżek: `on.paths`
GitHub Actions udostępnia skuteczny sposób osiągnięcia selektywności za pomocą filtra paths w wyzwalaczach przepływu pracy. Można określić katalogi lub pliki, których zmiana ma uruchamiać przepływ pracy.
Jeśli zmieni się plik spoza tych ścieżek, przepływ pracy się nie uruchomi. To idealne rozwiązanie dla monorepo!
on:
push:
branches:
- main
paths:
- 'apps/frontend/**'
- 'libs/shared/**'Filtr ścieżek w praktyce
Oto prosty przepływ pracy, który uruchamia się tylko wtedy, gdy zmiany zostaną wypchnięte do plików znajdujących się w katalogu apps/backend lub do określonego pliku README.md.
Dzięki temu uruchamiane są tylko testy lub kompilacje dotyczące usługi backendowej.
name: Backend CI
on:
push:
branches:
- main
paths:
- 'apps/backend/**'
- 'README.md'
jobs:
build-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build backend app
run: echo "Building backend..."Ignorowanie ścieżek: `paths-ignore`
Czasami przepływ pracy powinien uruchamiać się dla *większości* zmian, ale nie wtedy, gdy modyfikowane są wyłącznie określone pliki (np. dokumentacja lub pliki dziennika). Filtr paths-ignore doskonale się do tego nadaje.
Działa podobnie jak paths, ale określa pliki, których zmiana *nie* powinna uruchamiać przepływu pracy.
on:
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'Dynamiczne selektywne uruchamianie za pomocą `git diff`
W przypadku bardziej złożonej logiki można używać poleceń Git, takich jak git diff, w ramach etapów przepływu pracy, aby dynamicznie sprawdzać zmiany. Umożliwia to tworzenie niestandardowych warunków.
Można na przykład sprawdzić, czy zmiany zaszły w określonym folderze, i ustawić zmienną wyjściową decydującą o tym, czy kolejne zadanie powinno zostać uruchomione.
Przykład warunkowego wykonywania zadania
Ten etap przepływu pracy używa git diff, aby sprawdzić, czy między bieżącym zatwierdzeniem a gałęzią bazową zmieniły się jakiekolwiek pliki w katalogu apps/api/. Jeśli tak, ustawia zmienną wyjściową api_changed na wartość 'true'.
To wyjście może następnie sterować uruchomieniem zadania 'deploy API'.
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
api_changed: ${{ steps.diff.outputs.api_changed }}
steps:
- uses: actions/checkout@v4
- name: Check API changes
id: diff
run: |
if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
then
echo "api_changed=false" >> $GITHUB_OUTPUT
else
echo "api_changed=true" >> $GITHUB_OUTPUT
fi
deploy-api:
needs: check-changes
if: needs.check-changes.outputs.api_changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Deploy API
run: echo "Deploying API..."Struktura monorepo na potrzeby CI/CD
Uporządkowana struktura monorepo znacznie upraszcza selektywne CI/CD. Grupowanie powiązanych plików i projektów w jasno zdefiniowanych katalogach ułatwia skuteczne korzystanie z filtrów paths.
/apps/frontend/apps/backend/libs/shared/docs
Wyraźny podział umożliwia precyzyjne kierowanie przepływów pracy.
Quiz o CI/CD w monorepo
Optymalizacja CI/CD dla monorepo ma kluczowe znaczenie dla utrzymania tempa pracy programistów i efektywnego wykorzystania zasobów. Proszę zastanowić się, które strategie najlepiej odpowiadają na wyzwania związane z dużą, skonsolidowaną bazą kodu.
Podsumowanie i kolejne kroki
Dowiedział(a) się Pan/Pani, jak rozwiązywać problemy CI/CD w monorepo przez wdrażanie selektywnego wykonywania zadań. Korzystając z filtrów paths GitHub Actions i zaawansowanych technik git diff, można zapewnić, że potoki uruchamiają tylko to, co jest konieczne.
Prowadzi to do szybszej informacji zwrotnej, niższych kosztów i sprawniejszego procesu tworzenia oprogramowania. Proszę dalej poznawać sposoby precyzyjnego dostosowywania przepływów pracy, aby osiągać jeszcze większą wydajność!
Często zadawane pytania
Czy lekcja „CI/CD dla monorepozytoriów” jest bezpłatna?
Tak — pełny tekst „CI/CD dla monorepozytoriów” 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 DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Co nauczysz się w „CI/CD dla monorepozytoriów”?
Poznają Państwo strategie optymalizacji potoków CI/CD w monorepozytoriach, w tym selektywne uruchamianie zadań na podstawie zmienionych plików. Ćwiczysz DevOps Bootcamp 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ąć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp 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 1 z 4.
Ile czasu zajmuje lekcja „CI/CD dla monorepozytoriów”?
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 DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp 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