Ćwiczenie — wdrażanie kontenera platformy Docker na platformie Azure

Ukończone

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.

  1. W usłudze Azure DevOps przejdź do pozycji Potoki.

  2. Wybierz potok.

  3. 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 .

  4. Dodaj wyróżniony wiersz poniżej, aby dodać zmienne potoku o nazwie webRepository i tag. 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 lub python: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

  1. Wybierz pozycję Zapisz w prawym górnym rogu strony. Wpisz komunikat zatwierdzenia i wybierz pozycję Zapisz , aby potwierdzić.

  2. Wybierz pozycję Uruchom i upewnij się, że gałąź jest ustawiona na main. Po zakończeniu wybierz pozycję Uruchom .

  3. 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.

    Screenshot of Azure Pipelines showing the location of the website URL.

  4. Powinna zostać wyświetlona aplikacja internetowa uruchomiona w usłudze App Service.

    Screenshot of the Space Game website.

Andy: To okazało się wspaniałe! Myślę, że przyjęcie kontenerów może być ogromną wygraną dla naszego zespołu.