Używanie wyzwalaczy do kontrolowania uruchamiania potoku

Ukończone

Masz teraz działający potok, który wdraża plik Bicep w środowisku platformy Azure. Jednak za każdym razem, gdy zmienisz plik, musisz ręcznie uruchomić potok. W tej lekcji dowiesz się, jak wyzwalać potok 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 potoku?

Wyzwalacz potoku to warunek, który po spełnieniu automatycznie uruchamia potok na podstawie utworzonych reguł. Wyzwalacze można ustawić tak, aby uruchamiały potok w zaplanowanych odstępach czasu. Wyzwalacze można również ustawić tak, aby uruchamiały potok 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. Jeśli jednak nie pamiętają o uruchomieniu potoku, istnieje 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 potoku do uruchamiania za każdym razem, gdy aktualizujesz pliki, gdy zmiany zostaną wypchnięte, potok zacznie działać. Otrzymasz natychmiastową opinię na temat ważności zmiany i możesz mieć pewność, że środowisko produkcyjne jest zawsze aktualne.

Wyzwalacze gałęzi

Typowym typem wyzwalacza jest wyzwalacz gałęzi, nazywany również wyzwalaczem ciągłej integracji lub wyzwalaczem ciągłej integracji. Gdy używasz wyzwalacza gałęzi, za każdym razem, gdy wprowadzasz zmianę w określonej gałęzi, potok jest uruchamiany. Jeśli zatwierdzisz i wypchniesz zmianę do innej gałęzi, potok 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:

trigger:
- main

Wyzwalanie, gdy zmienia się wiele gałęzi

Wyzwalacze można skonfigurować do uruchamiania potoku 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ć potok za każdym razem, gdy kod zmieni się w gałęzi rozpoczynającej się od nazwy release/. Możesz użyć include właściwości z symbolem wieloznacznymi * :

trigger:
  branches:
    include:
    - 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ć potok 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 potok nie jest automatycznie wyzwalany dla zmian w gałęziach funkcji:

trigger:
  branches:
    include:
    - '*'
    exclude:
    - feature/*

Napiwek

Zwróć uwagę na znaki cudzysłowu wokół symbolu wieloznakowego w filtrze include . Format pliku YAML wymaga ujęć pojedynczego * znaku w cudzysłów podczas używania go jako symbolu wieloznakowego.

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 oddzielny folder docs zawierający pliki dokumentacji. Chcesz wyzwolić potok, gdy ktoś wprowadza zmianę do dowolnego pliku Bicep w folderze wdrażania , ale nie chcesz wyzwalać potoku, 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:

trigger:
  branches:
    include:
    - main
  paths:
    exclude:
    - docs
    include:
    - deploy

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

Zaplanuj automatyczne uruchamianie potoku

Potok 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. schedules Użyj słowa kluczowego triggerzamiast , a następnie ustaw częstotliwość przy użyciu wyrażenia cron:

schedules:
- cron: "0 0 * * *"
  displayName: Daily environment restore
  branches:
    include:
    - main

Uwaga

Wyrażenie cron to specjalnie sformatowana sekwencja znaków, która określa częstotliwość wystąpienia zdarzenia. W tym przykładzie oznacza uruchamianie 0 0 * * * codziennie o północy czasu UTC.

Możesz również ustawić gałąź repozytorium do użycia w zaplanowanym zdarzeniu. Po uruchomieniu potoku używa najnowszej wersji kodu z gałęzi ustawionej w harmonogramie.

Używanie wielu wyzwalaczy

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

trigger:
- main

schedules:
- cron: "0 0 * * *"
  displayName: Deploy test environment
  branches:
    include:
    - main

Po utworzeniu wyzwalacza gałęzi i zaplanowanego wyzwalacza w tym samym potoku potok jest uruchamiany za każdym razem, gdy plik zostanie zmieniony w gałęzi ustawionej w wyzwalaczu i zgodnie z ustawionym harmonogramem. W tym przykładzie potok 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 potoku. Jeśli domyślnie nie ustawisz wyzwalaczy, potok jest uruchamiany automatycznie za każdym razem, gdy jakiekolwiek zmiany pliku w dowolnej gałęzi, co często nie jest potrzebne.

Kontrola współbieżności

Domyślnie usługa Azure Pipelines umożliwia jednoczesne uruchamianie wielu wystąpień potoku. Może się to zdarzyć, gdy w krótkim czasie wykonasz wiele zatwierdzeń w gałęzi.

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

Aby uniknąć tych problemów, możesz użyć batch słowa kluczowego z wyzwalaczem, tak jak w tym przykładzie:

trigger:
  batch: true
  branches:
    include:
    - main

Po uruchomieniu wyzwalacza usługa Azure Pipelines gwarantuje, że oczekuje na ukończenie dowolnego aktywnego uruchomienia potoku. Następnie uruchamia nowy przebieg ze wszystkimi zmianami, które zostały zebrane od ostatniego uruchomienia.