Ćwiczenie — tworzenie pipeline w Azure DevOps w celu wdrożenia aplikacji chmurowej
Twój menedżer chce, abyś zmienił CI/CD dla firmowej aplikacji eShop na korzystanie z Azure Pipelines. Teraz utworzysz Azure DevOps Pipeline, aby zbudować i wdrożyć swój serwis produktów.
Utwórz potok Azure DevOps
Ważny
Przed rozpoczęciem musisz mieć konto usługi Azure DevOps. Jeśli go nie masz, możesz go utworzyć bezpłatnie na dev.azure.com.
- Zaloguj się do dev.azure.com.
- Wybierz + Nowy projekt.
- Dla projektu o nazwie, wprowadź wdrożenie eShop .
- Pozostaw ustawienie widoczności na wartość "Private", a następnie wybierz pozycję Utwórz.
- Po lewej stronie wybierz pozycję Potoki, a następnie wybierz pozycję Utwórz potok.
- Na stronie Connect, dla Gdzie jest twój kod?, wybierz GitHub.
- Jeśli zostanie wyświetlony monit, zaloguj się do usługi GitHub i autoryzuj usługę Azure Pipelines w celu uzyskania dostępu do konta usługi GitHub.
- Dla Wybierz repozytorium, wybierz swoje rozwidlenie repozytorium.
- Na stronie Konfiguracja wybierz opcję Wdróż do usługi Azure Kubernetes Service.
- W okienku Deploy to Azure Kubernetes Service (Wdrażanie w usłudze Azure Kubernetes Service) wybierz subskrypcję platformy Azure, a następnie wybierz pozycję Kontynuuj.
- Jeśli zostanie wyświetlony monit, zaloguj się do subskrypcji platformy Azure.
- Dla klastra , wybierz utworzony klaster AKS w poprzedniej lekcji aks-eshop.
- Dla przestrzeni nazw pozostaw zaznaczoną opcję Istniejąca, a następnie wybierz domyślną.
- W rejestrze kontenerów Azurewybierz rejestr utworzony w poprzedniej lekcji; na przykład acseshop186748394.
- W polu Nazwa obrazu wprowadź produkt/usługę.
- Dla portu usługowego , wprowadź 8080.
- Wybierz pozycję Zweryfikuj i skonfiguruj.
Przeglądaj plik YAML potoku
Usługa Azure Pipelines używa plików YAML do definiowania kroków tworzenia i wdrażania aplikacji. Plik YAML jest przechowywany w repozytorium GitHub i został utworzony automatycznie na podstawie podanych informacji.
Przejrzyjmy plik YAML:
trigger:
- main
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
imageRepository: 'productservice'
containerRegistry: 'acseshop186748394.azurecr.io'
dockerfilePath: '**/Dockerfile'
tag: '$(Build.BuildId)'
imagePullSecret: 'acseshop18674839414442d34-auth'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- upload: manifests
artifact: manifests
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
Wyzwalacz i zasoby określają, kiedy potok powinien zostać uruchomiony. W takim przypadku pipeline uruchomi się po wprowadzeniu zmiany w głównej gałęzi repozytorium.
Sekcja zmiennych definiuje zmienne używane w potoku. Zmienne są używane do definiowania usługi Azure Container Registry i pliku Dockerfile do użycia.
Następnie YAML definiuje zadanie Build, które korzysta z agenta ubuntu-latest. Zadanie używa zadania platformy Docker do skompilowania i wypchnięcia obrazu do usługi Azure Container Registry.
Ostatnim etapem jest wdrożenie aktualizowanej usługi produktowej do AKS. Zadanie używa zadania KubernetesManifest w celu wdrożenia obrazu w usłudze AKS.
Uruchamianie potoku
W prawym górnym rogu strony zwanej "Przejrzyj pipeline YAML" wybierz opcję "Zapisz i uruchom". W okienku Zapisywanie i uruchamianie:
- Wybierz , aby utworzyć nową gałąź dla tego zatwierdzenia.
- Pozostaw wartości domyślne wszystkich pozostałych opcji.
- Wybierz pozycję Zapisz i uruchom.
Monitorowanie potoku i rozwiązywanie problemów z tym potokiem
Usługa Azure Pipelines jest monitorowana i zarządzana z poziomu portalu usługi Azure DevOps. Przyjrzyjmy się danych wyjściowych uruchomienia utworzonego potoku.
Na stronie podsumowania są wyświetlane wszystkie etapy uruchomionego potoku. Możesz wybrać etap, aby wyświetlić kroki bardziej szczegółowo. Za chwilę zobaczysz, że pipeline uległ awarii. Wybierz etap Kompilacja .
Na etapie kompilacji widać, że kompilacja nie powiodła się. Wybierz krok Budowanie i wypychanie obrazu do usługi Azure Container Registry. Błąd w pliku dziennika pokazuje:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
Naprawianie błędu
W usłudze DevOps przejdź z powrotem do strony podsumowania przepływu. Zamierzasz edytować utworzony potok, aby naprawić błąd.
W prawym górnym rogu wybierz menu Więcej akcji, a następnie wybierz Edytuj kanał.
Wiersz 17 pliku YAML definiuje plik Dockerfile do użycia, a domyślnie potok oczekuje pliku o nazwie dockerfile w katalogu głównym repozytorium.
eShop używa innego pliku Docker dla usługi produktowej o nazwie DockerfileProducts. Edytuj wiersz 17, aby:
dockerfilePath: '**/DockerfileProducts.acr'
Wybierz pozycję Zapisz.
W okienku Zapisz wybierz Zapisz.
Wybierz pozycję Uruchom, a następnie w okienku Uruchom przepływ wybierz pozycję Uruchom.
Obejrzyj zakończenie procesu budowy etapu . Etap wdrażania jest wstrzymany, dopóki go nie wybierzesz i nie pozwolisz na jego uruchomienie.
Potok zostanie pomyślnie ukończony. Wybierz etap Wdróż, aby wyświetlić kroki.