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 używaniem 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 pięciu pól jednostki czasu do planowania zdarzenia w pliku przepływu pracy.

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

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. Korzystając z workflow_dispatch, możesz wybrać gałąź, w której chcesz uruchomić przepływ pracy, i ustawić opcjonalne inputs prezentowane przez GitHub 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 wykonywanego poza usługą GitHub. Zasadniczo działa jako żądanie HTTP do repozytorium, po prośbie do usługi GitHub o wyzwolenie przepływu pracy z akcji lub webhooka. 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ń webhook można wyzwalać z więcej niż jednej aktywności. Jeśli dla webhooku istnieje wiele aktywności, możesz określić typ aktywności, aby wyzwolić przepływ pracy. Na przykład można uruchomić przepływ pracy dla zdarzenia check_run, ale tylko dla typu aktywności rerequested lub requested_action.

on:
  check_run:
    types: [rerequested, requested_action]

Wywołanie repozytorium

repository_dispatch to niestandardowe zdarzenie w funkcji GitHub Actions, które umożliwia zewnętrznym systemom (a nawet innym przepływom pracy usługi GitHub) ręczne wyzwalanie przepływów pracy przez wysłanie żądania POST do interfejsu API usługi GitHub. Umożliwia ona elastyczną automatyzację i integrację z zewnętrznymi narzędziami, skryptami lub systemami, które muszą uruchamiać przepływy pracy w repozytorium.

Przypadki użycia

  • Rozpocznij przepływy pracy za pomocą zewnętrznych narzędzi CI/CD.

  • Koordynuj wdrożenia wielu repozytoriów (na przykład repozytorium A kończy kompilację → wyzwala repozytorium B).

  • Uruchom automatyzację na podstawie zdarzeń zewnętrznych (webhooków, alertów monitorujących, operacji CRON poza środowiskiem GitHub).

  • Łączenie wykonywania procesów roboczych między repozytoriami lub w monorepozytoriach.

Przykładowy przepływ pracy, który nasłuchuje repository_dispatch

name: Custom Dispatch Listener

on:
  repository_dispatch:
    types: [run-tests, deploy-to-prod]  # Optional filtering

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - name: Echo the payload
        run: |
          echo "Event type: ${{ github.event.action }}"
          echo "Payload value: ${{ github.event.client_payload.env }}"

Kluczowe elementy:

  • typy: opcjonalne. Definiuje niestandardowe typy zdarzeń, takie jak run-tests, deploy-to-proditp.

  • github.event.client_payload: dostęp do innych danych niestandardowych przekazanych w zdarzeniu wysyłania.

  • github.event.action: nazwa rodzaju zdarzenia wysłanego.

Wyzwalanie zdarzenia za pośrednictwem interfejsu API

Żądanie POST należy wysłać do punktu końcowego interfejsu API REST usługi GitHub w wersji 3:

POST https://api.github.com/repos/OWNER/REPO/dispatches

Autoryzacja

  • Wymagany jest osobisty token dostępu (PAT) z uprawnieniami do repozytorium.
  • W przypadku organizacji upewnij się, że odpowiednie ustawienia dostępu dla tokenu.

Przykładowa struktura poleceń

curl -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: token YOUR_GITHUB_TOKEN" \
  https://api.github.com/repos/OWNER/REPO/dispatches \
  -d '{"event_type":"run-tests","client_payload":{"env":"staging"}}'

Struktura ładunku

{
  "event_type": "run-tests",
  "client_payload": {
    "env": "staging"
  }
}

Parametry

(No changes needed) Typ Opis Wymagane
event_type ciąg Nazwa niestandardowa zdarzenia. Nazwa ta odnosi się do wartości typów w wyzwalaczu przepływu pracy. Tak
client_payload obiekt Dowolny JSON-owy ładunek do wysyłania niestandardowych danych do przepływu pracy (github.event.client_payload) Nie.

Podział parametrów repository_dispatch

Podczas wykonywania żądania POST do punktu końcowego interfejsu API usługi GitHub należy przekazać treść JSON z dwoma głównymi parametrami:

  • typ_zdarzenia
  • client_payload
typ_zdarzenia

Wymagany ciąg niestandardowy, który definiujesz. Usługa GitHub traktuje tę wartość jako "akcję" lub "typ" wysyłki. Służy do identyfikacji, co wyzwoliło przepływ pracy, i filtrowania przepływów pracy, które nasłuchują określonych typów.

  • Układ

    • Typ: ciąg
    • Przykład: "deploy", "run-tests", "sync-db", "build-docker"
  • Użyj w przepływie pracy: służy do nasłuchiwania określonych typów zdarzeń i uzyskiwania dostępu do wartości wewnątrz przepływu pracy. Ułatwia to ponowne użycie jednego przepływu pracy w wielu celach i sprawia, że automatyzacja jest bardziej zorganizowana i sterowana zdarzeniami.

  • Przykład:

- name: Print event type
  run: echo "Event type: ${{ github.event.action }}"
client_payload

Dowolny obiekt JSON, który umożliwia wysyłanie niestandardowych danych wraz z wysyłką. Zdefiniujesz strukturę i będzie ona dostępna w przepływie pracy.

  • Układ

    • Typ: obiekt
    • Klucze niestandardowe i wartości
  • Użycie w przepływie pracy: ten obiekt jest wykorzystywany do wdrożeń w wielu środowiskach, wersjonowanych wydań lub przekazywania kontekstu z innego systemu czy potoku. Umożliwia sparametryzowane przepływy pracy, podobnie jak argumenty wejściowe.

  • Przykład:

- name: Show payload values
  run: |
    echo "Environment: ${{ github.event.client_payload.env }}"
    echo "Version: ${{ github.event.client_payload.version }}"

Przykładowy podział ładunku
{
  "event_type": "deploy-to-prod",
  "client_payload": {
    "env": "production",
    "build_id": "build-456",
    "initiator": "admin_user",
    "services": ["web", "api", "worker"]
  }
}

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. Należy pamiętać, że w przypadku korzystania z warunkowych w przepływie pracy należy użyć określonej składni ${{ <expression> }}. Ta składnia 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 sprawdzenia, czy github.ref (gałąź lub tag ref, który wyzwolił przebieg przepływu pracy) pasuje do refs/heads/main. Aby kontynuować, przepływ pracy będzie wyglądać mniej więcej tak:

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ń, takich jak if warunkowe, można pominąć składnię wyrażeń. 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.

Zrzut ekranu przedstawiający wyłączanie przepływu pracy w usłudze GitHub.

Wyłączenie przepływu pracy może być przydatne w niektórych z następujących sytuacji:

  • 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 forkiem i nie potrzebujesz całej funkcjonalności niektórych zawartych w nim przepływów pracy (jak zaplanowane przepływy 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 uruchomienia przepływu pracy 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, nie musisz ponownie tworzyć tego samego przepływu pracy dla każdego repozytorium. Zamiast tego można 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 szablon przepływu pracy, jak przedstawiono tutaj.

Zrzut ekranu przedstawiający przepływ pracy organizacji szablonów o nazwie greet i klasyfikacji według 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 powoduje uruchomienie akcji z najnowszymi zmianami z tej gałęzi, co może być lub nie być pożądane. 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.