Ćwiczenie — wdrażanie kontenera platformy Docker na platformie Azure
Projekt został dołączony do potoku wydania, który kompiluje projekty w rozwiązaniu i wdraża aplikację internetową w usłudze App Service. Teraz nadszedł czas, aby zaktualizować kompilację potoku i wdrożyć projekt jako kontener.
Ta lekcja obejmuje następujące zagadnienia:
- Zdefiniuj niektóre zmienne potoku, aby ułatwić konserwację potoku kompilacji.
- Zastąp istniejące zadania kompilacji ujednoliconym zadaniem, aby skompilować i wypchnąć kontener platformy Docker.
- Zastąp istniejące zadanie Wdrażanie jednym, który aktualizuje aplikację internetową usługi App Service przy użyciu nowego obrazu kontenera.
- Zapisz potok, aby wyzwolić kompilację i wydanie.
Definiowanie zmiennych, które mają być współużytkowane w potoku
W tym miejscu dodasz nową zmienną potoku do istniejącego potoku YAML zdefiniowanego w pliku azure-pipelines.yml.
W usłudze Azure DevOps przejdź do pozycji Potoki.
Wybierz potok.
Zaznacz Edytuj. Upewnij się, że gałąź jest ustawiona na główną , wybierając ją z menu rozwijanego. Spowoduje to wyświetlenie pliku azure-pipelines.yml .
Dodaj wyróżniony wiersz poniżej, aby dodać zmienne potoku o nazwie
webRepository
itag
. Będą one używane w wielu zadaniach w celu unikatowego zidentyfikowania określonej wersji przywoływanego kontenera. Możesz również usunąć zmiennąbuildConfiguration
; nie będzie już jej potrzebna.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Zastępowanie zadań etapu kompilacji
Andy: Nie sądzę, że potrzebujemy już żadnego z tych zadań kompilacji, ponieważ plik Dockerfile w folderze projektu już definiuje odpowiednią kompilację. Nie miałem jednak szansy zobaczyć, czego możemy użyć do skompilowania obrazu przy użyciu pliku Dockerfile. Jakieś pomysły?
Mara: Po prostu szukałem tego w górę. Wygląda na to, że powinien być w stanie skompilować kontener, a nawet wypchnąć go do repozytorium za pomocą jednego zadania. Dodajmy ją teraz.
Zadanie Docker
Za pomocą zadania platformy Docker można kompilować i wdrażać obrazy platformy Docker. Zastąp cały etap kompilacji poniższym fragmentem kodu YAML.
- polecenie: określa polecenie platformy Docker do uruchomienia.
- buildContext: określa ścieżkę do kontekstu kompilacji.
- repozytorium: określa nazwę repozytorium.
- dockerfile: określa ścieżkę do pliku Dockerfile.
- containerRegistry: określa nazwę połączenia usługi rejestru platformy Docker.
- tags: określa listę tagów w oddzielnych wierszach. Te tagi są używane w poleceniach kompilacji, wypychania i kompilacjiAndPush.
- stage: 'Build'
displayName: 'Build and push'
jobs:
- job: 'Build'
displayName: 'Build job'
pool:
vmImage: 'ubuntu-20.04'
steps:
- task: Docker@2
displayName: 'Build and push the image to container registry'
inputs:
command: buildAndPush
buildContext: $(Build.Repository.LocalPath)
repository: $(webRepository)
dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
containerRegistry: 'Container Registry Connection'
tags: |
$(tag)
Zastępowanie zadania etapu wdrażania
Andy: Cóż, to wydaje się dość proste. Teraz wystarczy znaleźć zadanie, które spowoduje, że usługa App Service będzie używać nowo wypychanej wersji obrazu kontenera.
Mara: Jestem już na nim. Jest to nieco inne rozwiązanie niż wdrażanie kompilacji w usłudze Azure Pipelines, ale nadal jest wystarczająco bezpośrednie, że możemy wykonać zadanie w jednym zadaniu. Dodajmy ją teraz.
Zadanie usługi Azure Web App for Container
Zadanie Azure Web App for Container zostało zaprojektowane pod kątem wdrażania kontenerów platformy Docker w usłudze aplikacja systemu Azure Service. Zastąp cały etap Wdrażania poniższym fragmentem kodu YAML.
- appName: określa nazwę istniejącej usługi aplikacja systemu Azure.
- azureSubscription: określa nazwę subskrypcji usługi Azure Resource Manager dla wdrożenia.
- imageName: określa w pełni kwalifikowaną nazwę obrazu kontenera,
myregistry.azurecr.io/nginx:latest
na przykład lubpython:3.7.2-alpine/
.
- stage: 'Deploy'
displayName: 'Deploy the container'
dependsOn: Build
jobs:
- job: 'Deploy'
displayName: 'Deploy job'
pool:
vmImage: 'ubuntu-20.04'
variables:
- group: Release
steps:
- task: AzureWebAppContainer@1
inputs:
appName: $(WebAppName)
azureSubscription: 'Resource Manager - Tailspin - Space Game'
imageName: $(RegistryName)/$(webRepository):$(build.buildId)
Zapisywanie potoku w celu wyzwolenia kompilacji i wydania
Wybierz pozycję Zapisz w prawym górnym rogu strony. Wpisz komunikat zatwierdzenia i wybierz pozycję Zapisz , aby potwierdzić.
Wybierz pozycję Uruchom i upewnij się, że gałąź jest ustawiona na main. Po zakończeniu wybierz pozycję Uruchom .
Wybierz potok, aby wyświetlić dzienniki. Po pomyślnym zakończeniu kompilacji wybierz zadanie AzureWebAppContainer , a następnie wybierz adres URL aplikacji usługi App Service, aby wyświetlić wdrożonej aplikacji internetowej.
Powinna zostać wyświetlona aplikacja internetowa uruchomiona w usłudze App Service.
Andy: To okazało się wspaniałe! Myślę, że przyjęcie kontenerów może być ogromną wygraną dla naszego zespołu.