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

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

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

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

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

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

В рабочем выпуске эта задача поставляется с 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" должна пройти проверку подлинности с помощью Реестр контейнеров Azure для отправки образа контейнера. Приложение контейнера также должно пройти проверку подлинности с помощью Реестр контейнеров Azure, чтобы извлечь образ контейнера.

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

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

Настройка

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

  • Создание репозитория Azure DevOps для приложения
  • Создание приложения-контейнера с включенным управляемым удостоверением
  • AcrPull Назначение роли для Реестр контейнеров Azure управляемому удостоверению приложения-контейнера
  • Установка задачи "Приложения контейнеров Azure" из Azure DevOps Marketplace
  • Настройка подключения службы Azure DevOps для подписки Azure
  • Создание конвейера Azure DevOps

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

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

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

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

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

  2. Откройте страницу Repos .

  3. В верхней панели навигации выберите раскрывающийся список репозиториев и выберите "Импорт репозитория".

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

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

  6. Откройте терминал и выполните следующую команду, чтобы клонировать репозиторий:

    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 
    
  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 \
      --output tsv
    

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

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

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

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

  7. Настройте приложение-контейнер, чтобы использовать управляемое удостоверение для извлечения образов из Реестр контейнеров Azure.

    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

Чтобы развернуть в приложениях контейнеров Azure, необходимо создать подключение службы 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.

  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 начинает сборку и развертывание приложения контейнера. Чтобы проверка его ход выполнения, перейдите к конвейерам и выберите выполнение. Во время первого запуска конвейера может потребоваться авторизовать конвейер для использования подключения к службе.

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