Kompilacje macierzowe dla wielu środowisk
Wykorzystają Państwo strategie macierzowe do równoległego uruchamiania zadań dla wielu wersji języków, systemów operacyjnych lub konfiguracji.
Kompilacje macierzowe dla wielu środowisk 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 są kompilacje macierzowe?
Witamy przy omawianiu zaawansowanej funkcji GitHub Actions: kompilacji macierzowych! Wyobraźmy sobie, że trzeba przetestować kod w wielu różnych środowiskach, na przykład w różnych systemach operacyjnych lub z różnymi wersjami języka programowania.
Zamiast tworzyć osobny przepływ pracy dla każdej kombinacji, kompilacje macierzowe pozwalają zdefiniować zestaw zmiennych, a GitHub Actions automatycznie uruchomi zadania dla każdej możliwej kombinacji tych zmiennych.
Dlaczego warto używać kompilacji macierzowych?
Kompilacje macierzowe są niezwykle przydatne do:
- Testowania wieloplatformowego: sprawdzania, czy aplikacja działa w systemach Windows, macOS i Linux.
- Zapewnienia zgodności z wieloma wersjami: testowania z różnymi wersjami Node.js, Pythona lub bazy danych.
- Równoległego wykonywania: uruchamiania wszystkich tych testów jednocześnie, co pozwala znacznie zaoszczędzić czas.
Pozwalają one skutecznie uzyskać szersze pokrycie testami.
Podstawowa składnia macierzy
Macierz definiuje się w sekcji strategy zadania. W sekcji strategy.matrix należy podać co najmniej jedną zmienną, a każdej z nich przypisać tablicę wartości.
GitHub Actions tworzy następnie zadanie dla każdej kombinacji. Przyjrzyjmy się, jak to wygląda:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14, 16, 18]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testPrzykład: wiele wersji Node.js
We wcześniejszym fragmencie zdefiniowano zmienną node-version z trzema wartościami: 14, 16 i 18.
Ta pojedyncza definicja zadania uruchomi trzy osobne zadania, każde w środowisku ubuntu-latest, ale z inną wersją Node.js. Dzięki temu można upewnić się, że projekt działa z każdą z tych wersji.
Łączenie wielu zmiennych macierzy
Nie trzeba ograniczać się do jednej zmiennej! W macierzy można połączyć wiele zmiennych. Można na przykład przetestować różne systemy operacyjne z różnymi wersjami Node.js.
Wystarczy dodać kolejne pary klucz-wartość w sekcji strategy.matrix. Łączna liczba zadań będzie iloczynem liczby wartości przypisanych do poszczególnych zmiennych.
Przykład: macierz systemów operacyjnych i Node.js
Oto sposób skonfigurowania macierzy do testowania zarówno w systemie Ubuntu, jak i Windows, z użyciem wersji Node.js 16 i 18.
Zostaną utworzone 2 (systemy operacyjne) * 2 (wersje Node.js) = 4 osobne zadania.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testDostosowywanie kombinacji za pomocą 'include'
Czasami potrzebne są konkretne kombinacje, których nie obejmuje domyślny iloczyn kartezjański, albo dodatkowe zmienne dla wybranych kompilacji. Aby dodać nowe elementy macierzy, należy użyć include.
Można na przykład uruchomić dodatkowy test tylko w systemie Ubuntu z Node.js 14 albo przekazać konkretną zmienną środowiskową do określonej kombinacji systemu operacyjnego i wersji.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18]
include:
- os: ubuntu-latest
node-version: 14
test-suite: 'full'Wykluczanie określonych kombinacji
Co zrobić, jeśli wiadomo, że dana kombinacja zakończy się niepowodzeniem albo nie ma znaczenia dla projektu? Słowo kluczowe exclude pozwala usunąć określone konfiguracje z macierzy.
Pomaga to unikać niepotrzebnych uruchomień zadań i skupić się na odpowiednich przypadkach testowych.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18, 20]
exclude:
- os: windows-latest
node-version: 16Uzyskiwanie dostępu do zmiennych macierzy
W krokach zadania można uzyskać dostęp do bieżących wartości zmiennych macierzy za pomocą składni ${{ matrix.variable_name }}. Jest to niezbędne do konfigurowania narzędzi lub uruchamiania poleceń właściwych dla każdej kombinacji macierzy.
Na przykład ${{ matrix.os }} dynamicznie ustawia system operacyjny uruchomienia, a ${{ matrix.node-version }} konfiguruje akcję instalującą Node.js.
Zastosowania praktyczne
Kompilacje macierzowe są przydatne do:
- Tworzenia bibliotek: testowania z wieloma wersjami zależności.
- Projektów wielojęzycznych: budowania i testowania komponentów napisanych w różnych językach lub za pomocą różnych kompilatorów.
- Zapewnienia zgodności z przeglądarkami: testowania aplikacji internetowych w różnych przeglądarkach, jeśli używane narzędzie to obsługuje.
Upraszczają złożone scenariusze testowania, zamieniając je w przejrzyste i łatwe w utrzymaniu przepływy pracy.
Wyzwanie: kompilacja macierzowa
Rozważmy przepływ pracy GitHub Actions, który korzysta ze strategii macierzowej. Macierz jest zdefiniowana następująco:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.8, 3.9]
exclude:
- os: macos-latest
python-version: 3.8
Ile zadań zostanie utworzonych przez tę konfigurację macierzy?
Podsumowanie: kompilacje macierzowe
Świetnie! Poznali Państwo kompilacje macierzowe w GitHub Actions.
- Pozwalają one uruchamiać zadania dla wielu kombinacji zmiennych, takich jak system operacyjny czy wersje języka.
- Są definiowane za pomocą
strategy.matrixw ramach zadania. includedodaje określone kombinacje, aexcludeje usuwa.- Do zmiennych można uzyskać dostęp za pomocą
${{ matrix.variable_name }}.
Kompilacje macierzowe są niezbędne do wydajnego i kompleksowego testowania w różnorodnych środowiskach. Zachęcamy do dalszych ćwiczeń, aby dobrze je opanować!
Często zadawane pytania
Czy lekcja „Kompilacje macierzowe dla wielu środowisk” jest bezpłatna?
Tak — pełny tekst „Kompilacje macierzowe dla wielu środowisk” 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 „Kompilacje macierzowe dla wielu środowisk”?
Wykorzystają Państwo strategie macierzowe do równoległego uruchamiania zadań dla wielu wersji języków, systemów operacyjnych lub konfiguracji. Ć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 „Kompilacje macierzowe dla wielu środowisk”?
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
- Kompilacje macierzowe dla wielu środowisk
- Buforowanie zależności na rzecz szybkości
- Wielokrotnego użytku workflows i Actions
- Warunkowe wykonywanie i zależności zadań