Ćwiczenie — wdrażanie kontenera platformy Docker na platformie Azure
Twój projekt zawierał potok 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.
W tej jednostce wykonasz:
- Zdefiniuj niektóre zmienne ciągu budowania, aby ułatwić konserwację ciągu 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 piel trakt, aby uruchomić kompilację i wydanie.
Zdefiniuj zmienne do udostępnienia w potoku
W tym miejscu dodasz nową zmienną potoku do istniejącego potoku YAML zdefiniowanego w azure-pipelines.yml.
W usłudze Azure DevOps przejdź do pozycji Potoki.
Wybierz rurociąg.
Wybierz pozycję 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żna również usunąć zmiennąbuildConfiguration
; nie będzie już potrzebny.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Zastąp zadania 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: Właśnie to sprawdzałam. Wygląda na to, że można zbudować kontener, a nawet wypchnąć go do repozytorium za pomocą jednego zadania. Dodajmy ją teraz.
Zadanie platformy Docker
Można użyć zadania Docker do tworzenia i wdrażania obrazów Docker. Zastąp cały etap kompilacji poniższym fragmentem kodu YAML.
- polecenie: określa polecenie 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ąpić zadanie etapu wdrażania
Andy: Cóż, to wydaje się dość proste. Teraz musimy znaleźć zadanie, które spowoduje, że usługa App Service będzie używać nowo przesłanej wersji obrazu kontenera.
Mara: Już nad tym pracuję. To nieco inny proces niż wdrażanie kompilacji w usłudze Azure Pipelines, ale nadal na tyle bezpośredni, że możemy wykonać zadanie jedną operacją. 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 Azure App Service. Zastąp cały etap Wdrażania poniższym fragmentem kodu YAML.
- appName: określa nazwę istniejącej usługi Azure App Service.
- azureSubscription: określa nazwę subskrypcji usługi Azure Resource Manager dla wdrożenia.
-
imageName: określa w pełni kwalifikowaną nazwę obrazu kontenera; na przykład
myregistry.azurecr.io/nginx:latest
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)
Zapisz potok, aby wyzwolić kompilację i wdrożenie
Wybierz pozycję Zapisz w prawym górnym rogu strony. Wpisz komunikat zatwierdzenia i wybierz pozycję Zapisz , aby potwierdzić.
Wybierz Uruchom i upewnij się, że Twoja gałąź jest ustawiona na main. Po zakończeniu wybierz pozycję Uruchom .
Wybierz potok danych, 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żoną aplikację internetową.
Powinieneś zobaczyć swoją aplikację internetową działającą na usłudze App Service.
Andy: Okazało się to wspaniałe! Myślę, że przyjęcie kontenerów może być ogromną wygraną dla naszego zespołu.