Ćwiczenie — tworzenie potoku usługi Azure DevOps w celu wdrożenia aplikacji natywnej dla chmury
Twój menedżer chce zmienić ciągłą integrację/ciągłe wdrażanie dla firm eShop, aby korzystała z usługi Azure Pipelines. Teraz utworzysz potok usługi Azure DevOps, aby skompilować i wdrożyć usługę produktów.
Tworzenie potoku usługi Azure DevOps
Ważne
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 pozycję + Nowy projekt.
- W polu Nazwa projektu wprowadź wartość wdrożenie eShop.
- Pozostaw pozycję Widoczność ustawioną na Prywatny, a następnie wybierz pozycję Utwórz.
- Po lewej stronie wybierz pozycję Potoki, a następnie wybierz pozycję Utwórz potok.
- Na stronie Połączenie w polu Gdzie jest twój kod?, wybierz pozycję 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.
- W obszarze Wybierz repozytorium wybierz rozwidlenie repozytorium.
- Na stronie Konfigurowanie wybierz opcję Wdróż w usłudze Azure Kubernetes Service.
- W okienku 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.
- W polu Klaster wybierz klaster usługi AKS utworzony w poprzedniej lekcji aks-eshop.
- W obszarze Przestrzeń nazw pozostaw zaznaczoną opcję Istniejąca , a następnie wybierz pozycję domyślną.
- W obszarze Rejestr kontenerów wybierz usługę Azure Container Registry utworzoną w poprzedniej lekcji, na przykład acseshop186748394.
- W polu Nazwa obrazu wprowadź wartość productservice.
- W polu Port usługi wprowadź wartość 8080.
- Wybierz pozycję Zweryfikuj i skonfiguruj.
Przeglądanie pliku 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)
Sekcje wyzwalacza i zasobów definiują, kiedy należy uruchomić potok. W takim przypadku potok zostanie uruchomiony po zatwierdzeniu 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 kompilacji , które używa 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 zaktualizowanej usługi produktu w usłudze AKS. Zadanie używa zadania KubernetesManifest do wdrożenia obrazu w usłudze AKS.
Uruchamianie potoku
W prawym górnym rogu strony Przeglądanie potoku YAML wybierz pozycję Zapisz i uruchom. W okienku Zapisywanie i uruchamianie:
- Wybierz pozycję Utwórz 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. W ciągu kilku minut zobaczysz, że potok uległ awarii. Wybierz etap Kompilacja.
Na etapie kompilacji widać, że kompilacja nie powiodła się. Wybierz krok Kompiluj i wypychaj obraz 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 wróć do strony podsumowania potoku. Zamierzasz edytować utworzony potok, aby naprawić błąd.
W prawym górnym rogu wybierz menu Więcej akcji , a następnie wybierz pozycję Edytuj potok.
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 platformy Docker dla usługi produktu o nazwie DockerfileProducts. Edytuj wiersz 17, aby:
dockerfilePath: '**/DockerfileProducts'
Wybierz pozycję Zapisz.
W okienku Zapisz wybierz pozycję Zapisz.
Wybierz pozycję Uruchom , a następnie w okienku Uruchom potok wybierz pozycję Uruchom.
Obejrzyj zakończenie etapu kompilacji. Etap Wdrażania jest wstrzymywane do momentu wybrania go i zezwolenia na jego uruchomienie.
Potok zostanie pomyślnie ukończony. Wybierz etap Deploy (Wdrażanie), aby wyświetlić kroki.