Развертывание пользовательского контейнера в службе приложение Azure с помощью Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

С помощью Azure Pipelines можно создавать, тестировать и автоматически развертывать веб-приложение в контейнере веб-приложения службы приложение Azure в Linux. Из этой статьи вы узнаете, как использовать yamL или классические конвейеры для:

  • Создание и публикация образа Docker в Реестр контейнеров Azure
  • Создание веб-приложения Azure
  • Развертывание контейнера в службе приложение Azure
  • Развертывание в слотах развертывания

Необходимые компоненты

Получение кода

Вилку следующего примера приложения на сайте GitHub.

https://github.com/spring-guides/gs-spring-boot-docker.git

Создание и публикация образа Docker в Реестр контейнеров Azure

Для успешного выполнения этого раздела необходимо иметь Реестр контейнеров Azure. Дополнительные сведения см. в разделе предварительных требований.

  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.

  2. Выберите "Конвейеры" и " Создать конвейер".

  3. Выберите GitHub при появлении запроса на расположение исходного кода и выберите репозиторий.

  4. Выберите Docker: создайте и отправьте изображение в Реестр контейнеров Azure шаблон конвейера.

    Выбор шаблона конвейера Docker

  5. Выберите подписку Azure и нажмите кнопку "Продолжить".

  6. Выберите реестр контейнеров в раскрывающемся меню, а затем выберите "Проверить и настроить".

    Проверка и настройка Docker

  7. Просмотрите шаблон YAML конвейера, а затем нажмите кнопку "Сохранить и запустить" для сборки и публикации образа Docker в Реестр контейнеров Azure.

    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
        # Container registry service connection established during pipeline creation
        dockerRegistryServiceConnection: '{{ containerRegistryConnection.Id }}'
        imageRepository: 'javascriptdocker'
        containerRegistry: 'sampleappcontainerregistry.azurecr.io'
        dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
        tag: '$(Build.BuildId)'
    
        # Agent VM image name
        vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
        displayName: Build and push 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)
    
  8. Чтобы просмотреть опубликованный образ Docker после завершения выполнения конвейера, перейдите в реестр контейнеров в портал Azure, а затем выберите репозитории.

    Образ Docker, опубликованный в Реестр контейнеров Azure

  9. Чтобы развернуть образ из реестра контейнеров, необходимо включить учетную запись администратора. Перейдите в реестр контейнеров в портал Azure и выберите "Ключи доступа". Затем нажмите кнопку переключателя, чтобы включить Администратор пользователя.

    Включение пользователя Администратор

Создание веб-приложения

  1. Перейдите на портал Azure.

  2. Выберите "Создать контейнеры ресурсов>" и выберите веб-приложение для контейнеров.

    Создание веб-приложения для ресурса контейнеров

  3. Введите имя нового веб-приложения и создайте новую группу ресурсов. Выберите Linux в поле Операционная система.

    Настройка веб-приложения

  4. В разделе "Тарифные планы " выберите план F1 Free.

  5. Выберите Просмотр и создание. Просмотрите конфигурацию и нажмите кнопку "Создать " после завершения.

Развертывание в решении "Веб-приложение для контейнеров"

В этом YAML вы создаете и отправляете образ Docker в реестр контейнеров, а затем развертываете его в веб-приложении Azure для контейнеров. На этапе сборки вы создаете и отправляете образ Docker в Реестр контейнеров Azure с задачей Docker@2. Задача AzureWebAppContainer@1 развертывает образ в веб-приложении для контейнеров.


trigger:
- main

resources:
- repo: self

variables: 
  ## Add this under variables section in the pipeline
  azureSubscription: <Name of the Azure subscription>
  appName: <Name of the Web App>
  containerRegistry: <Name of the Azure container registry>
  dockerRegistryServiceConnection: '4fa4efbc-59af-4c0b-8637-1d5bf7f268fc'
  imageRepository: <Name of image repository>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push 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)


    ## Add the below snippet at the end of your pipeline
    - task: AzureWebAppContainer@1
      displayName: 'Azure Web App on Container Deploy'
      inputs:
        azureSubscription: $(azureSubscription)
        appName: $(appName)
        containers: $(containerRegistry)/$(imageRepository):$(tag)

Развертывание в слоте развертывания

Контейнер веб-приложения Azure можно настроить для нескольких слотов. Слоты позволяют безопасно развернуть приложение и протестировать его, прежде чем сделать его доступным для клиентов. Дополнительные сведения см. в статье "Создание промежуточных сред ".

В следующем фрагменте YAML показано, как выполнить развертывание в промежуточном слоте, а затем переключиться на рабочий слот:

- task: AzureWebAppContainer@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the web app>'
    containers: $(containerRegistry)/$(imageRepository):$(tag)
    deployToSlotOrASE: true
    resourceGroupName: '<Name of the resource group>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true

Вопросы и ответы

Вопрос. Как найти учетные данные реестра Docker?

Ответ. Перейдите к портал Azure и выберите веб-приложение для контейнеров. Выберите параметры приложения конфигурации>, а затем щелкните, чтобы отобразить значение.

Снимок экрана: поиск учетных данных реестра Docker.