Warunkowe wykonywanie i zależności zadań
Kontroluj, kiedy uruchamiane są kroki i zadania, używając warunków if, słowa kluczowego needs, wyrażeń i funkcji sprawdzających status w workflow GitHub Actions.
Warunkowe wykonywanie i zależności zadań to bezpłatna lekcja DevOps Bootcamp 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 DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Dlaczego warunki są ważne
Nie każdy krok powinien uruchamiać się za każdym razem. Możesz chcieć, aby krok wdrożeniowy uruchamiał się tylko na gałęzi main, a krok powiadamiania tylko wtedy, gdy coś się nie powiedzie.
GitHub Actions pozwala dołączyć warunek if do dowolnego kroku lub zadania, aby kontrolować, czy zostanie ono wykonane.
Klucz if
Dodaj klucz if: do kroku. Krok zostanie uruchomiony tylko wtedy, gdy wyrażenie zwróci wartość true.
Wyrażenia wewnątrz if nie wymagają opakowania ${{ }}, choć można go użyć.
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shObiekty kontekstu
Warunki odczytywane z obiektów kontekstu opisujących uruchomienie:
github— zdarzenie, ref, aktor, shaenv— zmienne środowiskowejobisteps— stan wcześniejszych działańrunner— system operacyjny i architektura
Na przykład github.event_name informuje, czy uruchomienie wywołało zdarzenie push czy pull_request.
Funkcje sprawdzające stan
Domyślnie krok jest pomijany, jeśli wcześniejszy krok zakończył się niepowodzeniem. Aby to zmienić, należy użyć funkcji sprawdzających stan:
success()— true, jeśli żaden wcześniejszy krok nie zakończył się niepowodzeniem (ustawienie domyślne)failure()— true, jeśli dowolny wcześniejszy krok zakończył się niepowodzeniemalways()— uruchamia się niezależnie od wynikucancelled()— true, jeśli uruchomienie zostało anulowane
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'Zawsze uruchamiane czyszczenie
Typowym wzorcem jest krok czyszczenia, który musi zostać wykonany nawet wtedy, gdy wcześniejsze kroki zakończyły się niepowodzeniem. Należy użyć if: always().
Gwarantuje to obsłużenie zasobów tymczasowych, kontenerów lub raportów z testów niezależnie od wyniku.
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logsZależności zadań z użyciem needs
Słowo kluczowe needs sprawia, że jedno zadanie czeka na zakończenie innych. Bez niego zadania są uruchamiane równolegle.
Zadanie wymienione w needs musi zakończyć się pomyślnie, zanim zostanie uruchomione zadanie od niego zależne.
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.shWiele zależności
Zadanie może zależeć od kilku innych zadań, jeśli do needs przekaże się listę. Czeka ono na zakończenie wszystkich tych zadań.
W ten sposób tworzy się wzorce typu fan-in, w których końcowe zadanie uruchamia się dopiero po pomyślnym zakończeniu wszystkich zadań równoległych.
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'Zadania warunkowe
Klucz if działa również na poziomie zadań, a nie tylko kroków. Warunek na poziomie zadania decyduje o tym, czy zostanie ono uruchomione w całości.
W tym przykładzie zadanie wdrażania uruchamia się tylko dla pushy do main, a jednocześnie nadal zależy od testów.
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shKorzystanie z outputs zadań
Zadania mogą przekazywać dane do kolejnych zadań za pomocą outputs. Zadanie zależne odczytuje je za pośrednictwem kontekstu needs.
Dzięki temu warunek może zależeć od wartości obliczonej wcześniej, na przykład od tego, czy zmieniła się wersja.
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUTŁączenie warunków
Wyrażenia można łączyć za pomocą && (i), || (lub) oraz ! (nie).
Ten przykład uruchamia się wyłącznie po pomyślnym pushu do main, który nie pochodzi z forka.
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'Zawsze uruchamiaj z if: always() i needs
Należy zachować ostrożność: zadanie zawierające needs jest pomijane, jeśli zależność zakończy się niepowodzeniem. Aby końcowe zadanie raportujące uruchamiało się niezależnie od wyniku, należy połączyć needs z if: always().
W jego obrębie można sprawdzić needs.<job>.result, aby zdecydować, co należy zaraportować.
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}Szybki test
Proszę sprawdzić, czy rozumieją Państwo wykonywanie warunkowe.
Podsumowanie
Poznali Państwo sposób sterowania przepływem pracy za pomocą warunków i zależności.
ifsteruje uruchamianiem kroków i zadań na podstawie wyrażeń- Funkcje sprawdzające stan, takie jak
failure()ialways(), nadpisują pomijanie po niepowodzeniu needstworzy wzorce kolejności i fan-inoutputszadań przekazują wartości do późniejszych warunków
Te podstawowe elementy pozwalają budować precyzyjne i wydajne potoki.
Często zadawane pytania
Czy lekcja „Warunkowe wykonywanie i zależności zadań” jest bezpłatna?
Tak — pełny tekst „Warunkowe wykonywanie i zależności zadań” 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 „Warunkowe wykonywanie i zależności zadań”?
Kontroluj, kiedy uruchamiane są kroki i zadania, używając warunków if, słowa kluczowego needs, wyrażeń i funkcji sprawdzających status w workflow GitHub Actions. Ć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 4 z 4.
Ile czasu zajmuje lekcja „Warunkowe wykonywanie i zależności zadań”?
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ń