0Pricing
DevOps Bootcamp · Lekcja

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

  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 DevOps Bootcamp