Użyj wyzwalaczy, aby kontrolować, kiedy uruchamia się pipeline.
Teraz masz działający potok wdrażania, który wdraża plik Bicep w środowisku Azure. Jednak za każdym razem, gdy zmienisz plik, musisz ręcznie uruchomić pipeline. W tej jednostce dowiesz się, jak wyzwalać potok do automatycznego uruchamiania zawsze, gdy zmienia się kod Bicep.
Uwaga
Polecenia w tej jednostce 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 rurociągu to warunek, który po spełnieniu automatycznie uruchamia potok na podstawie utworzonych reguł. Wyzwalacze można ustawić tak, aby uruchamiały pipeline 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 zapomną o uruchomieniu potoku, pojawi się różnica między definicjami zasobów w pliku Bicep a zasobami wdrożonymi w środowisku Azure. Załóżmy, że wykonano jeszcze kilka komitów i przesłań, ale ich nie wdrożono. Jeśli ktoś wprowadzi błąd lub błędną konfigurację w pliku Bicep w jednej z tych zmian, może być trudno śledzić błąd wśród wielu zatwierdzeń, które są następnie wdrażane jednocześnie. Po pewnym czasie nie będziesz ufać, że kod Bicep naprawdę reprezentuje infrastrukturę, a jego wartość ulega erozji.
Kiedy skonfigurujesz potok, aby uruchamiał się za każdym razem, gdy aktualizujesz pliki, natychmiast po wypchnięciu zmian potok rozpoczyna działanie. 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 gałęzi jest, nazywany również wyzwalaczem ciągłej integracji lub wyzwalaczem CI. Gdy używasz wyzwalacza gałęzi, za każdym razem, gdy wprowadzasz zmianę w określonej gałęzi, pipeline 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 dla domyślnej lub głównej gałęzi z użyciem następującego kodu:
trigger:
- main
Wyzwalanie, gdy zmienia się wiele gałęzi
Wyzwalacze można skonfigurować, aby uruchamiać potok w określonej gałęzi lub w grupach 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ć właściwości include
z symbolem wieloznacznym *
.
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. Aby wypróbować swoje pomysły w plikach Bicep, twoi współpracownicy tworzą gałęzie funkcjonalne. 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 funkcjonalnych tworzonych 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 cudzysłowy wokół symbolu wieloznakowego w filtrze include
. Format YAML pliku wymaga ująć pojedynczy znak *
w cudzysłowie, gdy używasz go jako znaku wieloznacznego.
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ć pipeline, gdy ktoś wprowadzi zmianę do dowolnego pliku Bicep w folderze deploy, ale nie chcesz, aby pipeline został wyzwolony, 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 potok, aby uruchamiał się automatycznie
Można uruchomić potok danych zgodnie z ustalonym 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 0 0 * * *
oznacza uruchamianie codziennie o północy czasu UTC.
Możesz również ustawić gałąź repozytorium, która ma być używana w zaplanowanym zdarzeniu. Po uruchomieniu potoku używa najnowszej wersji kodu z gałęzi, którą ustawiłeś/aś 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 oraz zaplanowanego wyzwalacza w tym samym potoku, potok uruchamia się za każdym razem, gdy plik jest zmieniany w gałęzi ustawionej przez wyzwalacz oraz według ustalonego harmonogramu. W tym przykładzie pipeline jest uruchamiany codziennie o północy czasu UTC, a także za każdym razem gdy zmiana jest przesyłana do gałęzi main.
Wskazówka
Dobrą praktyką 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 commitów 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ć trudno upewnić się, że przebiegi potoku nie zastępują zasobów ani konfiguracji 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 rozpoczyna nowy etap ze wszystkimi zmianami, które zgromadziły się od ostatniego uruchomienia.