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


Развертывание в приложениях-контейнерах Azure из Azure Pipelines

Приложения контейнеров Azure позволяют использовать Azure Pipelines для публикации редакций в приложении-контейнере. При отправке фиксаций в репозиторий Azure DevOps конвейер активируется, который обновляет образ контейнера в реестре контейнеров. Container Apps формирует новую редакцию на основе обновленного контейнерного образа.

Коммиты в определенную ветвь вашего репозитория активируют конвейер. При создании конвейера вы решите, какая ветвь является триггером.

Задача в Azure Pipelines для контейнерных приложений

Задача поддерживает следующие сценарии:

  • Создайте образ из Dockerfile и разверните его в контейнерных приложениях.
  • Сборка из исходного кода без Dockerfile и развертывание в приложениях-контейнерах. Поддерживаемые языки включают .NET, Java, Node.js, PHP и Python.
  • Разверните существующий контейнерный образ в Container Apps.

В рабочем выпуске эта задача поставляется с Azure DevOps и не требует явной установки. Полную документацию см. в статье AzureContainerApps@1. Задача "Развертывание приложений контейнеров Azure" версии 1.

Примеры использования

Ниже приведены некоторые распространенные сценарии использования задачи. Дополнительные сведения см. в документации по задаче.

Создание и развертывание в приложениях-контейнерах

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

steps:
- task: AzureContainerApps@1
  inputs:
    appSourcePath: '$(Build.SourcesDirectory)/src'
    azureSubscription: 'my-subscription-service-connection'
    acrName: 'myregistry'
    containerAppName: 'my-container-app'
    resourceGroup: 'my-container-app-rg'

Задача использует Dockerfile в appSourcePath, чтобы создать образ контейнера. Если файл Dockerfile не найден, задача пытается создать образ контейнера из исходного кода appSourcePath.

Развертывание существующего образа контейнера в приложениях контейнеров

В следующем фрагменте кода показано, как развернуть существующий образ контейнера в Контейнерных приложениях. Задача аутентифицируется в реестре с использованием сервисного подключения. Если удостоверение подключения к службе не назначено AcrPush роли для реестра, укажите учетные данные администратора реестра с помощью входных параметров acrUsername и acrPassword.

steps:
  - task: AzureContainerApps@1
    inputs:
      azureSubscription: 'my-subscription-service-connection'
      containerAppName: 'my-container-app'
      resourceGroup: 'my-container-app-rg'
      imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'

Внимание

Если вы создаете образ контейнера на отдельном шаге, обязательно используйте уникальный тег, например идентификатор сборки вместо стабильного тега latest. Для получения дополнительной информации см. Лучшие практики использования тегов изображений.

Аутентификация в Реестре контейнеров Azure

Задача "Приложения контейнеров" должна пройти проверку подлинности в реестре контейнеров Azure, чтобы отправить образ контейнера. Приложение контейнера также должно пройти аутентификацию в реестре контейнеров, чтобы получить образ контейнера.

Для отправки образов задача автоматически проходит аутентификацию с контейнерным реестром, указанным в acrName, используя подключение службы, предоставленное в azureSubscription. Если удостоверение подключения службы не назначено AcrPush роли для реестра, введите учетные данные администратора реестра, используя acrUsername и acrPassword.

Для загрузки образов контейнерные приложения используют либо управляемую удостоверенность (рекомендуется), либо учетные данные администратора для аутентификации с реестром контейнеров. Чтобы использовать управляемое удостоверение, приложение контейнера, являющееся целью задачи, должно быть настроено на использование управляемого удостоверения. Чтобы пройти проверку подлинности с учетными данными администратора реестра, задайте для задачи acrUsername и acrPassword входные данные.

Настройка

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

  • Создание репозитория Azure DevOps для приложения
  • Создайте контейнерное приложение с активированным управляемым удостоверением
  • Назначьте роль AcrPull для реестра контейнеров управляемому удостоверению контейнерного приложения.
  • Настройка подключения службы Azure DevOps для подписки Azure
  • Создание конвейера Azure DevOps

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

Требование Инструкции
Учетная запись Azure Если у вас нет учетной записи, создайте бесплатную учетную запись. Для выполнения процедур, описанных в этой статье, вам потребуется разрешение участника или владельца подписки Azure. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.
проект Azure DevOps Перейдите к Azure DevOps и выберите Начните работать с Azure. Затем создайте проект.
Azure CLI Установите интерфейс командной строки Azure.

Создание репозитория Azure DevOps и клонирование исходного кода

Перед созданием конвейера исходный код приложения должен находиться в репозитории.

  1. Войдите в Azure DevOps и перейдите в проект.

  2. Выберите Repos в левой области.

  3. Выберите Импорт репозитория.

  4. Введите следующие значения и нажмите кнопку "Импорт".

    Поле значение
    Тип репозитория Git
    Клонированный URL-адрес https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
  5. Выберите Импорт.

  6. Выберите "Клонировать", чтобы просмотреть URL-адрес репозитория и скопировать его.

  7. Откройте командную строку и выполните следующую команду:

    git clone <REPOSITORY_URL> my-container-app
    

    Замените <REPOSITORY_URL> на скопированный URL-адрес.

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

Создайте приложение-контейнер, выполнив следующие действия. Команда az containerapp up создает ресурсы Azure, создает образ контейнера, сохраняет образ в реестре и развертывает приложение контейнера.

После создания приложения вы можете добавить управляемое удостоверение в приложение и назначить удостоверению роль AcrPull, чтобы позволить удостоверению извлекать образы из реестра.

  1. Перейдите в папку src клонированного репозитория:

    cd my-container-app
    cd src
    
  2. Создайте ресурсы Azure и разверните приложение-контейнер с помощью az containerapp up команды:

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Подсказка

    Если сборка не удаётся из-за ошибки репозитория Debian, убедитесь, что вы используете последнюю версию Azure CLI и расширение containerapp для Azure CLI, выполнив команду az extension add --name containerapp --upgrade. Кроме того, добавьте Dockerfile в проект для более эффективного управления сборкой.

  3. В выходных данных команды обратите внимание на имя реестра контейнеров Azure.

  4. Получите полный идентификатор ресурса реестра контейнеров:

    az acr show --name <ACR_NAME> --query id --output tsv
    

    Замените <ACR_NAME> именем своего реестра.

  5. Включите управляемое удостоверение для контейнерного приложения:

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    Обратите внимание на основной идентификатор управляемой идентификации в выходных данных команды.

  6. AcrPull Назначьте роль для реестра контейнеров управляемому удостоверению приложения контейнера:

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    Замените <MANAGED_IDENTITY_PRINCIPAL_ID> основным идентификатором управляемого удостоверения и <ACR_RESOURCE_ID> идентификатором ресурса реестра контейнеров.

  7. Настройте приложение-контейнер для использования управляемой идентификации для загрузки образов из реестра контейнеров.

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    Замените <ACR_NAME> именем реестра контейнеров Azure.

Создание подключения службы Azure DevOps

Чтобы развернуть в среде Container Apps, необходимо создать служебное подключение Azure DevOps для вашей подписки в Azure.

  1. В Azure DevOps выберите Параметры проекта.

  2. Выберите подключения службы.

  3. Выберите Создать подключение к службе.

  4. Выберите Azure Resource Manager и нажмите кнопку "Далее".

  5. Выберите регистрацию приложений (автоматически) и нажмите кнопку "Далее".

  6. Укажите следующие значения и нажмите кнопку "Сохранить".

    Поле значение
    Подписка Выберите свою подписку Azure.
    Группа ресурсов Выберите группу ресурсов (my-container-app-rg), содержащую приложение контейнера и реестр контейнеров.
    Имя подключения службы my-subscription-service-connection

Дополнительные сведения о подключениях к службам см. в статье "Подключение к Microsoft Azure".

Создание конвейера YAML Azure DevOps

  1. В проекте Azure DevOps выберите Pipelines.

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

  3. Выберите Azure Repos Git.

    Замечание

    Если вы не видите Azure Repos Git в качестве параметра, убедитесь, что исходный код отправляется в репозиторий Git в проекте Azure DevOps.

  4. Выберите репозиторий, содержащий исходный код (my-container-app).

  5. Выберите Стартовый конвейер.

  6. В редакторе замените содержимое файла следующим YAML:

    trigger:
      branches:
        include:
          - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
      - task: AzureContainerApps@1
        inputs:
          appSourcePath: '$(Build.SourcesDirectory)/src'
          azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>'
          acrName: '<ACR_NAME>'
          containerAppName: 'my-container-app'
          resourceGroup: 'my-container-app-rg'
    

    Замените <AZURE_SUBSCRIPTION_SERVICE_CONNECTION> именем подключения службы Azure DevOps (my-subscription-service-connection), созданного на предыдущем шаге. Замените <ACR_NAME> именем реестра контейнеров Azure.

  7. Выберите Сохранить и выполнить.

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

Чтобы развернуть новую версию приложения, отправьте новый коммит в основную ветвь.