Развертывание пользовательского контейнера в службе приложение Azure с помощью Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
С помощью Azure Pipelines можно создавать, тестировать и автоматически развертывать веб-приложение в контейнере веб-приложения службы приложение Azure в Linux. Из этой статьи вы узнаете, как использовать yamL или классические конвейеры для:
- Создание и публикация образа Docker в Реестр контейнеров Azure
- Создание веб-приложения Azure
- Развертывание контейнера в службе приложение Azure
- Развертывание в слотах развертывания
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Учетная запись GitHub. Создайте бесплатную учетную запись GitHub, если еще не сделали этого.
- Организация Azure DevOps. Создайте организацию, если у вас еще нет.
- Реестр контейнеров Azure. Создайте реестр контейнеров Azure, если у вас еще нет.
Получение кода
Вилку следующего примера приложения на сайте GitHub.
https://github.com/spring-guides/gs-spring-boot-docker.git
Создание и публикация образа Docker в Реестр контейнеров Azure
Для успешного выполнения этого раздела необходимо иметь Реестр контейнеров Azure. Дополнительные сведения см. в разделе предварительных требований.
Войдите в свою организацию Azure DevOps и откройте нужный проект.
Выберите "Конвейеры" и " Создать конвейер".
Выберите GitHub при появлении запроса на расположение исходного кода и выберите репозиторий.
Выберите Docker: создайте и отправьте изображение в Реестр контейнеров Azure шаблон конвейера.
Выберите подписку Azure и нажмите кнопку "Продолжить".
Выберите реестр контейнеров в раскрывающемся меню, а затем выберите "Проверить и настроить".
Просмотрите шаблон 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)
Чтобы просмотреть опубликованный образ Docker после завершения выполнения конвейера, перейдите в реестр контейнеров в портал Azure, а затем выберите репозитории.
Чтобы развернуть образ из реестра контейнеров, необходимо включить учетную запись администратора. Перейдите в реестр контейнеров в портал Azure и выберите "Ключи доступа". Затем нажмите кнопку переключателя, чтобы включить пользователя администратора.
Создание веб-приложения
Перейдите на портал Azure.
Выберите "Создать контейнеры ресурсов>" и выберите веб-приложение для контейнеров.
Введите имя нового веб-приложения и создайте новую группу ресурсов. Выберите Linux в поле Операционная система.
В разделе "Тарифные планы " выберите план F1 Free.
Выберите Просмотр и создание. Просмотрите конфигурацию и нажмите кнопку "Создать " после завершения.
Развертывание в решении "Веб-приложение для контейнеров"
В этом 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 и выберите веб-приложение для контейнеров. Выберите параметры приложения конфигурации>, а затем щелкните, чтобы отобразить значение.