Поделиться через


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

В этой статье описывается, как развернуть контейнерное приложение Windows в службе приложений Azure из репозитория Azure Repos Git с помощью Azure Pipelines для непрерывной интеграции и доставки (CI/CD). Azure Repos и Azure Pipelines являются бесплатными службами Azure DevOps, которые позволяют размещать, создавать, планировать и тестировать код с помощью любой платформы и облака. Конвейер определяется как файл YAML в корневом каталоге репозитория.

Предварительные условия

  • Учетная запись Azure с экземпляром реестра Azure Container Registry и веб-приложением, созданным в Azure App Service. Создание учетной записи Azure бесплатно.
  • Организация и проект Azure DevOps с приложением Windows, выполняющимся в контейнере Docker, и вспомогательным файлом Dockerfile, загруженным в репозиторий Azure Repos в вашем проекте.
  • Соответствующие роли пользователей или разрешения для создания ресурсов Azure и управления ими и Azure DevOps проектов, конвейеров, репозиториев и подключений к службам. Дополнительные сведения см. в разделе Manage security in Azure Pipelines.

Добавление подключения к службе

Перед созданием этого конвейера необходимо создать подключение службы Azure к Azure Container Registry. В Azure DevOps выберите Project Settings для проекта и создайте подключение службы, выполнив инструкции Create подключение к службе.

Чтобы создать подключение службы для этого проекта и конвейера, выберите Docker Registry, а затем Azure Container Registry в качестве типа реестра. После создания подключения службы скопируйте его идентификатор , который будет использоваться на следующем шаге.

Создание и настройка конвейера

Создайте и настройте конвейер для выполнения шагов по созданию контейнера, отправке в реестр и развертыванию образа в службе приложений.

Создайте конвейер, выполнив следующие действия.

  1. В проекте в Azure DevOps выберите Pipelines в меню навигации слева и выберите Create или Create Pipeline.
  2. На экране Где ваш код, выберите Azure Repos Git.
  3. На экране "Выбор репозитория" выберите репозиторий , содержащий приложение.
  4. На экране "Настройка конвейера" выберите "Начальный конвейер".
  5. Щелкните стрелку раскрывающегося списка рядом с "Сохранить и выполнить" в правом верхнем углу и выберите "Сохранить", а затем снова выберите "Сохранить". Еще не запускайте конвейер.

Создание переменных

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

  1. Выберите Изменить в правом верхнем углу на странице конвейера, а затем выберите Переменные в правом верхнем углу на странице редактирования.

  2. На экране "Переменные" выберите "Создать переменную".

  3. Добавьте следующие пары имен и значений, используя собственные сведения для значений-заполнителей. Нажмите кнопку ОК после добавления каждой переменной, а затем выберите, + чтобы добавить следующую переменную. Если значение является секретом, установите флажок , чтобы сохранить этот секрет значения.

    • vmImageName: windows-latest
    • imageRepository: <имя репозитория>
    • dockerfilePath: $(Build.SourcesDirectory)/<folder-path>/Dockerfile
    • dockerRegistryServiceConnection: <service-connection-ID>
  4. После добавления переменных нажмите кнопку "Сохранить " на экране "Переменные " и снова нажмите кнопку "Сохранить " на странице конвейера.

Добавление задачи для сборки и отправки образа

Замените весь существующий код в начальном файле azure-pipelines.yml следующим кодом. Этот код добавляет задачу Docker, которая создает и отправляет образ в Azure Container Registry. Код использует $(<variable-name>) синтаксис для вызова переменных, настроенных ранее.

trigger:
  - main

pool:
  vmImage: 
   $(vmImageName) 

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

Добавить задачу развертывания для службы приложений

Добавьте задачу развертывания в Azure App Service. Для этой задачи необходимо указать имя подписки Azure, имя веб-приложения и имя реестра контейнеров.

  1. Добавьте этап развертывания в файл azure-pipelines.yml , добавив следующий код в конец файла.

    - stage: Deploy
      displayName: Deploy to App Service
      jobs:
      - job: Deploy
        displayName: Deploy
        pool:
          vmImage: $(vmImageName)
        steps:
    
  2. Поместите курсор в новую строку в конце файла и при необходимости щелкните значок "Показать помощник " справа, чтобы отобразить область задач . В области Tasks найдите и выберите задачу Azure App Service deploy.

  3. На экране Azure App Service deploy выполните следующие сведения:

    • Тип подключения Connection: выберите Azure Resource Manager.
    • подписка Azure. Выберите имя и идентификатор подписки Azure. При необходимости выберите "Авторизовать".
    • Тип службы приложения: выберите Web App for Containers (Windows).
    • Имя службы приложений: выберите или введите имя веб-приложения службы приложений.
    • Registry или Namespace: Введите имя экземпляра Azure Container Registry.
    • Изображение. Введите имя репозитория, в котором хранится код.
  4. Нажмите кнопку "Добавить". Следующий код добавляется к концу файла с вашими значениями, заменяющими заполнители.

     - task: AzureRmWebAppDeployment@4
       inputs:
         ConnectionType: 'AzureRM'
         azureSubscription: '<your subscription name (subscription ID)>'
         appType: 'webAppHyperVContainer'
         WebAppName: '<your App Service web app name>'
         DockerNamespace: '<your Azure Container Registry instance name>'
         DockerRepository: '<your repository name>'
    

Запуск конвейера

Конвейер теперь готов к запуску.

  1. Нажмите кнопку "Проверить и сохранить" и снова нажмите кнопку "Сохранить ".
  2. Нажмите кнопку "Выполнить" и снова нажмите кнопку "Выполнить ".

Конвейер включает в себя шаги по сборке и передаче образа контейнера Windows в Azure Container Registry и развертывание образа в службе приложений.

В следующем коде показан полный файл определения конвейера azure-pipelines.yml с примерами значений.

trigger:
  - main

pool:
  vmImage: 
   $(vmImageName) 

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

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: 'mysubscription(00000000-0000-0000-0000-000000000000)'
        appType: 'webAppHyperVContainer'
        WebAppName: 'myWindowsDockerSample'
        DockerNamespace: 'mycontainerregistry'
        DockerRepository: 'myrepository'