Używanie wyzwalaczy do kontrolowania uruchamiania potoku
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 trigger
zamiast , 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.