0Pricing
DevOps Bootcamp · Lekcja

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

Obiekty kontekstu

Warunki odczytywane z obiektów kontekstu opisujących uruchomienie:

  • github — zdarzenie, ref, aktor, sha
  • env — zmienne środowiskowe
  • job i steps — 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ę niepowodzeniem
  • always() — uruchamia się niezależnie od wyniku
  • cancelled() — 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: ./logs

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

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

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

  • if steruje uruchamianiem kroków i zadań na podstawie wyrażeń
  • Funkcje sprawdzające stan, takie jak failure() i always(), nadpisują pomijanie po niepowodzeniu
  • needs tworzy wzorce kolejności i fan-in
  • outputs zadań 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

  1. Kompilacje macierzowe dla wielu środowisk
  2. Buforowanie zależności na rzecz szybkości
  3. Wielokrotnego użytku workflows i Actions
  4. Warunkowe wykonywanie i zależności zadań
← Powrót do DevOps Bootcamp