Używanie wyzwalaczy do kontrolowania uruchamiania przepływu pracy

Ukończone

Masz teraz działający przepływ pracy, który wdraża plik Bicep w środowisku platformy Azure. Jednak za każdym razem, gdy zmienisz plik, musisz ręcznie uruchomić przepływ pracy. W tej lekcji dowiesz się, jak wyzwolić przepływ pracy w celu automatycznego uruchamiania po zmianie kodu Bicep.

Uwaga

Polecenia w tej lekcji są wyświetlane w celu zilustrowania pojęć. Nie uruchamiaj jeszcze poleceń. Będziesz ćwiczyć to, czego nauczysz się tutaj wkrótce.

Co to jest wyzwalacz przepływu pracy?

Wyzwalacz przepływu pracy to warunek, który po spełnieniu automatycznie uruchamia przepływ pracy na podstawie utworzonych reguł. Wyzwalacze można ustawić tak, aby uruchamiały przepływ pracy w zaplanowanych odstępach czasu. Wyzwalacze można również ustawić tak, aby uruchamiały przepływ pracy za każdym razem, gdy plik w repozytorium ulegnie zmianie. Możesz wybrać drugą opcję, ponieważ dobrym pomysłem jest uruchomienie wszystkich testów i kroków wdrażania za każdym razem, gdy ktoś zmieni kod.

Jeśli nie używasz wyzwalacza automatycznego, ktoś może wprowadzić zmianę w pliku Bicep, a nawet zatwierdzić go i wypchnąć do repozytorium, ale jeśli zapomni uruchomić przepływ pracy, wystąpi różnica między definicjami zasobów w pliku Bicep i zasobami wdrożonym w środowisku platformy Azure. Załóżmy, że wykonano jeszcze kilka zatwierdzeń i wypchnięć, ale nie wdrożono. Jeśli ktoś wprowadzi błąd lub błędną konfigurację w pliku Bicep w jednym z tych zmian, może być trudne do śledzenia błędu wśród wielu zatwierdzeń, które są później wdrażane jednocześnie. Po pewnym czasie nie będziesz ufać, że kod Bicep naprawdę reprezentuje infrastrukturę, a jego wartość jest osłabiona.

Po skonfigurowaniu przepływu pracy do uruchamiania za każdym razem, gdy aktualizujesz pliki, po wypchnięciu zmian przepływ pracy zacznie działać. Otrzymasz natychmiastową opinię na temat ważności zmiany i możesz mieć pewność, że środowisko produkcyjne jest zawsze aktualne.

Wyzwalacze zdarzeń wypychania

Typowym typem wyzwalacza jest wyzwalacz zdarzenia wypychania, nazywany również wyzwalaczem ciągłej integracji lub wyzwalaczem ciągłej integracji. Gdy używasz wyzwalacza zdarzeń wypychania, za każdym razem, gdy wprowadzasz zmianę w określonej gałęzi, przepływ pracy jest uruchamiany. Jeśli zatwierdzisz i wypchniesz zmianę do innej gałęzi, przepływ pracy nie zostanie wyzwolony i nie zostanie uruchomiony. Ten typ wyzwalacza jest często używany względem domyślnej lub głównej gałęzi z następującym kodem:

on:
  push:
    branches:
      - main

Wyzwalanie, gdy zmienia się wiele gałęzi

Wyzwalacze można skonfigurować do uruchamiania przepływu pracy w określonej gałęzi lub w zestawach gałęzi. Załóżmy na przykład, że tworzysz gałęzie wydania zawierające kod, który zostanie wdrożony dla określonej wersji projektu. Możesz użyć nazw gałęzi, takich jak release/v1, release/v2 itd. Chcesz uruchomić przepływ pracy za każdym razem, gdy kod zmieni się w gałęzi rozpoczynającej się od nazwy release/. Możesz użyć symbolu wieloznacznych ** :

on:
  push:
    branches:
      - main
      - 'release/**'

Można też wykluczyć określone gałęzie. Załóżmy, że współpracujesz z członkami zespołu w projekcie. Twoi współpracownicy tworzą gałęzie funkcji, aby wypróbować swoje pomysły w plikach Bicep. Wszystkie gałęzie funkcji mają nazwy, takie jak feature/add-database, feature/improve-performance itd. Chcesz automatycznie uruchomić przepływ pracy we wszystkich gałęziach z wyjątkiem gałęzi funkcji utworzonych przez współpracowników. Korzystając z exclude właściwości, upewnij się, że przepływ pracy nie jest automatycznie wyzwalany dla zmian w gałęziach funkcji:

on:
  push:
    branches-ignore:
      - 'feature/**'

Uwaga

Niektóre gałęzie można wykluczyć przy użyciu ! znaku . Załóżmy, że chcesz wyzwolić przepływ pracy dla gałęzi głównej i wszystkich gałęzi wydań, z wyjątkiem wersji alfa. Możesz użyć ! znaku , aby wyrazić to:

on:
  push:
    branches:
      - main
      - 'release/**'
      - '!release/**-alpha'

Nie można używać branches elementów i branches-ignore jednocześnie w jednym wyzwalaczu, dlatego ! znak zapewnia elastyczność kontrolowania zachowania wyzwalacza.

Filtry ścieżek

Czasami masz pliki w repozytorium, które nie są związane z wdrożeniem. Na przykład w repozytorium może istnieć folder deploy zawierający kod Bicep i podfolder dokumentów zawierający pliki dokumentacji. Chcesz wyzwolić przepływ pracy, gdy ktoś dokona zmiany w dowolnym z plików Bicep w folderze wdrażania , ale nie chcesz wyzwalać przepływu pracy, jeśli ktoś zmieni tylko plik dokumentacji. Aby skonfigurować wyzwalacz w celu reagowania na zmiany w określonym folderze w repozytorium, możesz użyć filtru ścieżki:

on:
  push:
    paths:
      - 'deploy/**'
      - '!deploy/docs/**'

Jeśli ktoś zatwierdzi zmianę, która aktualizuje tylko plik dokumentacji, przepływ pracy nie zostanie uruchomiony. Ale jeśli ktoś zmieni plik Bicep, a nawet jeśli zmieni plik Bicep oprócz pliku dokumentacji, wyzwalacz uruchamia przepływ pracy.

Uwaga

Można również użyć metody paths-ignore, która działa w podobny sposób do słowa kluczowego branches-ignore . Nie można jednak używać paths funkcji i paths-ignore w tym samym wyzwalaczu.

Planowanie automatycznego uruchamiania przepływu pracy

Przepływ pracy można uruchomić zgodnie z ustawionym harmonogramem, a nie w odpowiedzi na zmianę pliku. Na przykład możesz uruchomić nocne wydanie kodu Bicep lub automatycznie wdrożyć środowisko testowe każdego ranka. Użyj słowa kluczowego schedule i ustaw częstotliwość przy użyciu wyrażenia cron:

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

Uwaga

Wyrażenie cron to specjalnie sformatowana sekwencja znaków, która określa, jak często coś powinno się zdarzyć. W tym przykładzie oznacza uruchamianie 0 0 * * * codziennie o północy czasu UTC.

W pliku YAML należy dodać znaki cudzysłowu wokół ciągów zawierających * znak, takich jak wyrażenia cron.

Zdarzenie harmonogramu zawsze uruchamia przepływ pracy w domyślnej gałęzi repozytorium.

Używanie wielu wyzwalaczy

Wyzwalacze i harmonogramy można łączyć, tak jak w tym przykładzie:

on:
  push:
    branches:
      - main
  schedule:
    - cron: '0 0 * * *'

Po utworzeniu wyzwalacza gałęzi i zaplanowanego wyzwalacza w tym samym przepływie pracy przepływ pracy jest uruchamiany za każdym razem, gdy plik zmienia się w gałęzi ustawionej w wyzwalaczu i zgodnie z ustawionym harmonogramem. W tym przykładzie przepływ pracy jest uruchamiany codziennie o północy czasu UTC, a także za każdym razem, gdy zmiana zostanie wypchnięta do gałęzi głównej.

Napiwek

Dobrym rozwiązaniem jest ustawienie wyzwalaczy dla każdego przepływu pracy. Jeśli domyślnie nie ustawisz wyzwalaczy, przepływ pracy jest uruchamiany automatycznie za każdym razem, gdy jakiekolwiek zmiany plików w dowolnej gałęzi, co często nie jest potrzebne.

Wyzwalacze elementu webhook

Usługa GitHub udostępnia również zdarzenia elementu webhook, które są uruchamiane automatycznie po wystąpieniu niektórych zdarzeń w repozytorium. Te zdarzenia obejmują osoby tworzące gałąź, aktualizacje problemów z usługą GitHub lub zmiany żądań ściągnięcia. Ogólnie rzecz biorąc, te zdarzenia nie wymagają uruchomienia przepływu pracy wdrażania Bicep, ale zamiast tego można uruchomić inną automatyzację.

Kontrola współbieżności

Domyślnie funkcja GitHub Actions umożliwia jednoczesne uruchamianie wielu wystąpień przepływu pracy. Może się to zdarzyć, gdy w krótkim czasie wykonasz wiele zatwierdzeń w gałęzi lub jeśli poprzednie uruchomienie nie zostało zakończone po następnym uruchomieniu.

W niektórych sytuacjach posiadanie wielu współbieżnych przebiegów przepływu pracy nie jest problemem. Jednak podczas pracy z przepływami pracy wdrażania może być trudne, aby upewnić się, że przebiegi przepływu pracy nie zastępują zasobów platformy Azure ani konfiguracji w sposób, którego nie oczekujesz.

Aby uniknąć tych problemów, możesz zastosować kontrolę współbieżności. Użyj słowa kluczowego concurrency , a następnie określ ciąg spójny we wszystkich przebiegach dla przepływu pracy. Zazwyczaj jest to ciąg zakodowany w kodzie, na przykład w tym przykładzie:

concurrency: MyWorkflow

Następnie funkcja GitHub Actions gwarantuje, że oczekuje na ukończenie dowolnego aktywnego przebiegu przepływu pracy przed uruchomieniem nowego przebiegu.