Konfigurowanie przepływu pracy funkcji GitHub Actions

Ukończone

W tym miejscu poznasz niektóre typowe konfiguracje w pliku przepływu pracy. Zapoznasz się również z kategoriami typów zdarzeń, wyłączaniem i usuwaniem przepływów pracy oraz przy użyciu określonych wersji akcji w celu uzyskania najlepszych rozwiązań w zakresie zabezpieczeń.

Konfigurowanie przepływów pracy do uruchamiania dla zaplanowanych zdarzeń

Jak wspomniano wcześniej, możesz skonfigurować przepływy pracy tak, aby były uruchamiane po wystąpieniu określonego działania w usłudze GitHub, gdy wystąpi zdarzenie poza usługą GitHub lub w zaplanowanym czasie. Zdarzenie schedule umożliwia wyzwolenie przepływu pracy w celu uruchomienia o określonych godzinach UTC przy użyciu składni cron POSIX. Ta składnia cron ma pięć * pól, a każde pole reprezentuje jednostkę czasu.

Diagram of the five unit-of-time fields for scheduling an event in a workflow file.

Jeśli na przykład chcesz uruchomić przepływ pracy co 15 minut, schedule zdarzenie będzie wyglądać następująco:

on:
  schedule:
    - cron:  '*/15 * * * *'

A jeśli chcesz uruchomić przepływ pracy w każdą niedzielę o godzinie 3:00, schedule wydarzenie będzie wyglądać następująco:

on:
  schedule:
    - cron:  '0 3 * * SUN'

Możesz również użyć operatorów, aby określić zakres wartości lub wybrać numer w zaplanowanym przepływie pracy. Najkrótszy interwał, który można uruchamiać zaplanowane przepływy pracy, wynosi co pięć minut i jest uruchamiany w najnowszym zatwierdzeniu w gałęzi domyślnej lub podstawowej.

Konfigurowanie przepływów pracy do uruchamiania dla zdarzeń ręcznych

Oprócz zaplanowanych zdarzeń można ręcznie wyzwolić przepływ pracy przy użyciu workflow_dispatch zdarzenia. To zdarzenie umożliwia uruchomienie przepływu pracy przy użyciu interfejsu API REST usługi GitHub lub wybranie przycisku Uruchom przepływ pracy na karcie Akcje w repozytorium w usłudze GitHub. Za pomocą programu workflow_dispatchmożesz wybrać gałąź, w której ma być uruchamiany przepływ pracy, a także ustawić opcjonalne inputs , że usługa GitHub będzie prezentować jako elementy formularza w interfejsie użytkownika.

on:
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

Oprócz workflow_dispatchprogramu można użyć interfejsu API usługi GitHub do wyzwolenia zdarzenia elementu webhook o nazwie repository_dispatch. To zdarzenie umożliwia wyzwolenie przepływu pracy dla działania, które występuje poza usługą GitHub, i zasadniczo służy jako żądanie HTTP do repozytorium z prośbą usługi GitHub o wyzwolenie przepływu pracy poza akcję lub element webhook. To zdarzenie ręczne wymaga wykonania dwóch czynności: wysłania POST żądania do punktu końcowego /repos/{owner}/{repo}/dispatches usługi GitHub z nazwami zdarzeń elementu webhook w treści żądania i skonfigurowania przepływu pracy do korzystania ze repository_dispatch zdarzenia.

curl \
  -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/octocat/hello-world/dispatches \
  -d '{"event_type":"event_type"}'
on:
  repository_dispatch:
    types: [opened, deleted]

Konfigurowanie przepływów pracy do uruchamiania dla zdarzeń elementu webhook

Na koniec można skonfigurować przepływ pracy do uruchamiania w przypadku wystąpienia określonych zdarzeń elementu webhook w usłudze GitHub. Większość zdarzeń elementu webhook można wyzwalać z więcej niż jednego działania dla elementu webhook, więc jeśli istnieje wiele działań dla elementu webhook, możesz określić typ działania, aby wyzwolić przepływ pracy. Na przykład można uruchomić przepływ pracy dla check_run zdarzenia, ale tylko dla rerequested typów działań lub requested_action .

on:
  check_run:
    types: [rerequested, requested_action]

Używanie słów kluczowych warunkowych

W pliku przepływu pracy można uzyskiwać dostęp do informacji kontekstowych i oceniać wyrażenia. Mimo że wyrażenia są często używane ze słowem kluczowym warunkowym if w pliku przepływu pracy w celu określenia, czy krok powinien zostać uruchomiony, czy nie, można użyć dowolnego obsługiwanego kontekstu i wyrażenia do utworzenia warunkowego. Ważne jest, aby wiedzieć, że w przypadku korzystania z warunkowych w przepływie pracy należy użyć określonej składni ${{ <expression> }}, która nakazuje usłudze GitHub obliczenie wyrażenia, a nie traktowanie go jako ciągu.

Na przykład przepływ pracy, który używa warunkowego if do sprawdzania, czy github.ref element (gałąź lub tag ref, który wyzwolił przebieg przepływu pracy) jest zgodny refs/heads/main z następującymi krokami w przepływie pracy, będzie wyglądać następująco:

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      ...

Zwróć uwagę, ${{ }} że w tym przykładzie brakuje w składni . W przypadku niektórych wyrażeń, podobnie jak w przypadku warunkowego if , można pominąć składnię wyrażenia. Usługa GitHub automatycznie ocenia niektóre z tych typowych wyrażeń, ale zawsze można je uwzględnić w przypadku zapomnienia, które wyrażenia są automatycznie obliczane przez usługę GitHub.

Aby uzyskać więcej informacji na temat składni i wyrażeń przepływu pracy, zapoznaj się ze składnią przepływu pracy dla funkcji GitHub Actions.

Wyłączanie i usuwanie przepływów pracy

Po dodaniu przepływu pracy do repozytorium może wystąpić sytuacja, w której chcesz tymczasowo wyłączyć przepływ pracy. Możesz zatrzymać wyzwalanie przepływu pracy bez konieczności usuwania pliku z repozytorium w usłudze GitHub lub za pośrednictwem interfejsu API REST usługi GitHub. Jeśli chcesz ponownie włączyć przepływ pracy, możesz to łatwo zrobić przy użyciu tych samych metod.

Screenshot of disabling a workflow on GitHub.

Wyłączenie przepływu pracy może być przydatne w niektórych sytuacjach, na przykład:

  • Błąd w przepływie pracy powoduje generowanie zbyt wielu lub nieprawidłowych żądań wpływających negatywnie na usługi zewnętrzne.
  • Chcesz tymczasowo wstrzymać przepływ pracy, który nie jest krytyczny i zużywa zbyt wiele minut na koncie.
  • Chcesz wstrzymać przepływ pracy wysyłający żądania do usługi, która nie działa.
  • Pracujesz nad rozwidleniem i nie potrzebujesz wszystkich funkcji niektórych przepływów pracy, które zawiera (na przykład zaplanowanych przepływów pracy).

Możesz również anulować przebieg przepływu pracy, który jest w toku w interfejsie użytkownika usługi GitHub, na karcie Akcje lub przy użyciu punktu końcowego interfejsu DELETE /repos/{owner}/{repo}/actions/runs/{run_id}API usługi GitHub. Pamiętaj, że po anulowaniu przebiegu przepływu pracy usługa GitHub anuluje wszystkie jego zadania i kroki w ramach tego uruchomienia.

Korzystanie z szablonowego przepływu pracy organizacji

Jeśli masz przepływ pracy używany przez wiele zespołów w organizacji, zamiast ponownie tworzyć ten sam przepływ pracy dla każdego repozytorium, możesz podwyższyć spójność w całej organizacji przy użyciu szablonu przepływu pracy zdefiniowanego w repozytorium organizacji .github . Każdy członek w organizacji może używać przepływu pracy szablonu organizacji, a dowolne repozytorium w tej organizacji ma dostęp do tych przepływów pracy szablonów.

Te przepływy pracy można znaleźć, przechodząc do karty Akcje repozytorium w organizacji, wybierając pozycję Nowy przepływ pracy, a następnie znajdując sekcję szablonu przepływu pracy organizacji zatytułowaną "Przepływy pracy utworzone według nazwy organizacji". Na przykład organizacja o nazwie Mona ma przepływ pracy szablonu, jak pokazano poniżej.

Screenshot of a template organization workflow called greet and triage by Mona.

Używanie określonych wersji akcji

Podczas odwoływania się do akcji w przepływie pracy zalecamy odwoływanie się do określonej wersji tej akcji, a nie tylko samej akcji. Odwołując się do określonej wersji, umieszczasz zabezpieczenie przed nieoczekiwanymi zmianami wypchniętymi do akcji, która może potencjalnie przerwać przepływ pracy. Poniżej przedstawiono kilka sposobów odwołowania się do określonej wersji akcji:

steps:    
  # Reference a specific commit
  - uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
  # Reference the major version of a release
  - uses: actions/setup-node@v1
  # Reference a minor version of a release
  - uses: actions/setup-node@v1.2
  # Reference a branch
  - uses: actions/setup-node@main

Niektóre odwołania są bezpieczniejsze niż inne. Na przykład odwoływanie się do określonej gałęzi spowoduje uruchomienie tej akcji poza najnowszymi zmianami z tej gałęzi, które mogą być lub nie są potrzebne. Odwołując się do określonego numeru wersji lub zatwierdzenia skrótu SHA, bardziej szczegółowe informacje na temat wersji uruchomionej akcji. Aby uzyskać większą stabilność i bezpieczeństwo, zalecamy użycie zatwierdzenia sha akcji wydanej w przepływach pracy.