Planowanie potoku wydania przy użyciu usługi Azure Pipelines
W tej sekcji dowiesz się, jak Andy i Mara planują podstawowy potok ciągłego wdrażania, który działa w usłudze Azure Pipelines.
Po zakończeniu zostaną one demonstracyjne dla reszty zespołu. Potok będzie służyć jako weryfikacja koncepcji, którą poprawi i rozszerzy, gdy dowie się więcej i uzyska opinię od Tima i Amity.
Jakie są części podstawowego potoku ciągłego wdrażania?
Podstawowy potok ciągłego wdrażania zawiera wyzwalacz umożliwiający przejście procesu i co najmniej jeden etap lub fazę wdrażania. Etap składa się z zadań. Zadanie to seria kroków, które definiują sposób kompilowania, testowania lub wdrażania aplikacji.
Andy: Mamy już artefakt kompilacji . Jest to plik zip tworzony przez istniejący potok kompilacji. Ale jak wdrożyć go w środowisku na żywo?
Co to jest etap potoku?
Etap jest częścią potoku, który może działać niezależnie i być wyzwalany przez różne mechanizmy. Mechanizm może być powodzeniem poprzedniego etapu, harmonogramu, a nawet wyzwalacza ręcznego. Więcej informacji na temat tych mechanizmów znajdziesz w następnym module.
Mara: Moglibyśmy mieć etap, który kompiluje aplikację i inny etap, który uruchamia testy.
Mara: Zdefiniowaliśmy już zadania dla etapu kompilacji w naszym potoku. Nasz etap wdrażania może być podobny, w tym zadania, które wdrażają kompilację w środowisku.
Pytanie brzmi: gdzie powinniśmy wdrożyć artefakt?
Co to jest środowisko?
Prawdopodobnie użyto terminu środowisko do odwoływania się do lokalizacji, w której działa aplikacja lub usługa. Na przykład środowisko produkcyjne może być miejscem, w którym użytkownicy końcowi uzyskują dostęp do aplikacji.
W tym przykładzie środowisko produkcyjne może być następujące:
- Maszyna fizyczna lub maszyna wirtualna.
- Środowisko konteneryzowane, takie jak Kubernetes.
- Usługa zarządzana, taka jak usługa aplikacja systemu Azure.
- Środowisko bezserwerowe, takie jak Azure Functions.
Artefakt jest wdrażany w środowisku. Usługa Azure Pipelines ułatwia wdrażanie w niemal dowolnym środowisku — zarówno lokalnie, jak i w chmurze.
W usłudze Azure Pipelines termin środowisko ma drugie znaczenie. W tym miejscu środowisko jest abstrakcyjną reprezentacją środowiska wdrażania, takiego jak klaster Kubernetes, wystąpienie usługi App Service lub maszyna wirtualna.
Środowisko usługi Azure Pipelines rejestruje historię wdrażania, aby ułatwić identyfikację źródła zmian. Korzystając ze środowisk usługi Azure Pipelines, można również zdefiniować kontrole zabezpieczeń i sposoby kontrolowania sposobu podwyższenia poziomu artefaktu z jednego etapu potoku do innego. To, co obejmuje środowisko, zależy od tego, co chcesz zrobić z artefaktem. Środowisko, w którym chcesz przetestować artefakt, prawdopodobnie będzie definiowane inaczej niż środowisko, w którym chcesz wdrożyć artefakt dla użytkowników końcowych.
Jednym ze sposobów zdefiniowania środowiska usługi Azure Pipelines jest użycie pliku YAML. Plik YAML zawiera sekcję environment
, która określa środowisko usługi Azure Pipelines, w którym wdrożysz artefakt.
Podczas planowania potoku wydania musisz zdecydować, gdzie będzie działać aplikacja lub usługa. Posłuchajmy i zobaczmy, co andy i Mara zdecydują.
Andy: Na wysokim poziomie, jakiego typu środowiska chcemy? Czy chcemy wdrożyć lokalnie, czy w chmurze?
Mara: Możemy poprosić Tima o utworzenie maszyny wirtualnej dla nas w laboratorium, ale zawsze zabraknie sprzętu. Skonfigurowanie weryfikacji koncepcji będzie szybkie i łatwe, jeśli korzystamy z chmury.
Andy: Zgadzam się, ale istnieje tak wiele opcji chmury do rozważenia i możemy użyć usługi Azure Pipelines do wdrożenia w dowolnej z nich. Które należy spróbować?
Mara: Zespoły, które opracowują nasze gry, używają platformy Azure do hostowania niektórych systemów zaplecza. Szybko go skonfigurowali i wydają się to lubić. Myślę, że powinniśmy trzymać się platformy Azure dla naszej chmury.
Andy: OK, to ma sens! Jednak platforma Azure oferuje tak wiele opcji obliczeniowych. Które należy wybrać?
Andy wyświetla listę tych opcji na tablicy:
- Maszyny wirtualne
- Kontenery
- Azure App Service
- Obliczenia bezserwerowe
Uwaga
Więcej informacji na temat każdej z tych opcji obliczeniowych znajdziesz na końcu tego modułu.
Mara: Wiem, że kontenery i przetwarzanie bezserwerowe są popularne w tej chwili. W porównaniu z maszynami wirtualnymi oba są lekkie pod względem zasobów. Są one również łatwe do zastąpienia i skalowania w poziomie. Oba są interesujące, ale jestem zdenerwowany uczenie się dwóch nowych technologii w tym samym czasie. Wolałem skupić się tylko na budowaniu rurociągu.
Andy: Jestem z tobą. To pozostawia maszyny wirtualne lub usługę App Service. Myślę, że maszyny wirtualne byłyby lepszym wyborem, gdyby przenosiliśmy aplikację biznesową — taką, która wymaga pełnego dostępu do określonego środowiska — do chmury. Nie robimy nic tak znaczącego.
Mara: To pozostawia usługę App Service, która byłaby moim wyborem. Jest ona przeznaczona do pracy z usługą Azure DevOps i zapewnia korzyści. Jest to środowisko platformy jako usługi (PaaS) dla aplikacji internetowych, więc zajmuje nam dużo obciążenia. Nie będziemy musieli martwić się o infrastrukturę. Oferuje ona również funkcje zabezpieczeń i umożliwia nam równoważenie obciążenia i automatyczne skalowanie.
Andy: Usługa App Service brzmi jak to, czego potrzebujemy. Użyjmy usługi App Service. Mimo to tworzymy tylko dowód koncepcji. Zawsze możemy zmienić opcję obliczeniową, jeśli chcemy spróbować czegoś innego później.
Jak usługa Azure Pipelines wykonuje kroki wdrażania?
Aby wdrożyć aplikację, usługa Azure Pipelines musi najpierw uwierzytelnić się w środowisku docelowym. Usługa Azure Pipelines udostępnia różne mechanizmy uwierzytelniania. Używany element zależy od środowiska docelowego, do którego wdrażasz. Więcej informacji na temat tych mechanizmów znajdziesz na końcu tego modułu.
Andy: mamy artefakt kompilacji i wiemy, że utworzymy i wdrożymy na etapach potoku. Zdefiniowaliśmy również środowisko docelowe dla naszego wdrożenia. To jest usługa App Service. Moje pytanie brzmi teraz: jak usługa Azure Pipelines uwierzytelnia się w usłudze App Service? Wiem, że będzie to jeden z obaw Tima. Musimy upewnić się, że proces jest bezpieczny.
Po kilku badaniach Andy i Mara zapoznają się z ogólnymi krokami, które umożliwiają usłudze Azure Pipelines wdrażanie w usłudze App Service:
- Określ docelowe środowisko wdrażania w konfiguracji potoku.
- Zapewnij usłudze Azure Pipelines możliwość uwierzytelniania dostępu do tego środowiska.
- Zadania usługi Azure Pipelines umożliwiają wdrożenie artefaktu kompilacji w tym środowisku.
Mara: Zgodnie z naszymi badaniami musimy utworzyć połączenie z usługą w celu określenia środowiska docelowego i uwierzytelnienia dostępu do niego. Po zdefiniowaniu połączenia z usługą będzie on dostępny dla wszystkich naszych zadań do użycia. Następnie musimy użyć wbudowanych zadań DownloadPipelineArtifact, aby pobrać artefakt kompilacji do agenta potoku i usługi AzureWebApp, aby wdrożyć naszą aplikację w usłudze aplikacja systemu Azure Service.
Co to są zadania i strategie?
Istniejący potok kompilacji definiuje agenta kompilacji, zmienne potoku i zadania wymagane do utworzenia oprogramowania.
Część wdrożenia potoku zawiera te same elementy. Konfiguracja wdrożenia zwykle definiuje również jedno lub więcej zadań, środowisko potoku i strategie. Wiesz już więcej o środowiskach potoków wcześniej.
Oto przykładowa konfiguracja, która zostanie uruchomiona w dalszej części tego modułu. Ta konfiguracja wdraża witrynę internetową Space Game w usłudze aplikacja systemu Azure Service.
- stage: 'DeployDev'
displayName: 'Deploy to dev environment'
dependsOn: Build
jobs:
- deployment: Deploy
pool:
vmImage: 'ubuntu-20.04'
environment: dev
variables:
- group: 'Release Pipeline'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- task: AzureWebApp@1
displayName: 'Azure App Service Deploy: website'
inputs:
azureSubscription: 'Resource Manager - Tailspin - Space Game'
appName: '$(WebAppName)'
package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Stanowiska
Zadanie to seria kroków lub zadań, które są uruchamiane sekwencyjnie jako jednostka. Każdy etap potoku ma domyślnie jedno zadanie, nawet jeśli ten etap nie używa słowa kluczowego job
.
Zadanie można uruchomić w puli agentów, w kontenerze lub bezpośrednio na serwerze Usługi Azure DevOps. Przykładowe zadanie pokazane tutaj jest uruchamiane na agencie z systemem Ubuntu hostowanym przez firmę Microsoft.
Możesz określić warunki, w których każde zadanie jest uruchamiane. Przykładowe zadanie pokazane tutaj nie definiuje żadnych warunków. Domyślnie zadanie jest uruchamiane, jeśli nie zależy od żadnego innego zadania lub czy wszystkie zadania, od których zależy, zakończyły się pomyślnie.
Można również uruchamiać zadania równolegle lub sekwencyjnie. Korzystając z istniejącego potoku kompilacji jako przykładu, możesz użyć zadań równoległych do kompilowania oprogramowania na agentach systemu Windows, Linux i macOS jednocześnie.
Zadanie wdrożenia to specjalny typ zadania , który odgrywa ważną rolę w etapach wdrażania. Zadania wdrażania rejestrują stan wdrożeń w usłudze Azure Pipelines, zapewniając dziennik inspekcji. Zadania wdrażania ułatwiają również zdefiniowanie strategii wdrażania, którą wkrótce wykonamy.
Strategie
Strategia definiuje sposób wdrażania aplikacji. Więcej informacji na temat strategii, takich jak niebieski-zielony i kanary, znajdziesz w przyszłym module. Na razie użyjesz strategii runOnce, aby pobrać pakiet Space Game z potoku i wdrożyć go w usłudze aplikacja systemu Azure Service.
Jak usługa Azure Pipelines łączy się z platformą Azure?
Aby wdrożyć aplikację w zasobie platformy Azure, takim jak maszyna wirtualna lub usługa App Service, potrzebne jest połączenie z usługą. Połączenie z usługą zapewnia bezpieczny dostęp do subskrypcji platformy Azure przy użyciu jednej z dwóch metod:
- Uwierzytelnianie nazwy głównej usługi
- Tożsamości zarządzane dla zasobów platformy Azure
Na końcu tego modułu możesz dowiedzieć się więcej na temat tych modeli zabezpieczeń, ale krótko mówiąc:
- Jednostka usługi to tożsamość z ograniczoną rolą, która może uzyskiwać dostęp do zasobów platformy Azure. Pomyśl o jednostce usługi jako koncie usługi, które może wykonywać automatyczne zadania w Twoim imieniu.
- Tożsamości zarządzane dla zasobów platformy Azure to funkcja identyfikatora Entra firmy Microsoft, która upraszcza proces pracy z jednostkami usługi. Ponieważ tożsamości zarządzane istnieją w dzierżawie firmy Microsoft Entra, infrastruktura platformy Azure może automatycznie uwierzytelniać usługę i zarządzać kontem.
Tożsamości zarządzane upraszczają proces pracy z jednostkami usługi; Jednak w tym module będziemy używać uwierzytelniania jednostki usługi, ponieważ połączenie usługi może automatycznie odnajdywać zasoby platformy Azure i przypisywać odpowiednie role jednostki usługi.
Plan
Andy i Mara są gotowi rozpocząć. Będą:
- Oparty na istniejącej konfiguracji kompilacji usługi Azure Pipelines.
- Zdefiniuj etap kompilacji, który tworzy artefakt.
- Zdefiniuj etap wdrażania, który wdraża artefakt w usłudze App Service.
Andy: Czy ten rysunek jest poprawny? Usługa Azure Pipelines jest używana do wdrażania w usłudze aplikacja systemu Azure Service. W tym celu użyjemy artefaktu kompilacji jako danych wejściowych do etapu wdrażania . Zadania na etapie wdrażania pobierają artefakt i używają połączenia z usługą w celu wdrożenia artefaktu w usłudze App Service .
Mara: To o sumuje. Zaczynajmy.