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

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

Изменения репозитория GitHub активируют действие для создания новой редакции.

Рабочий процесс GitHub Actions активируется фиксацией в определенной ветви в репозитории. При создании рабочего процесса вы решите, какая ветвь активирует рабочий процесс.

В этой статье показано, как создать полностью настраиваемый рабочий процесс. Сведения о создании начального рабочего процесса GitHub Actions с помощью Azure CLI см. в статье "Создание рабочего процесса действий GitHub" с помощью Azure CLI.

Действие GitHub для приложений контейнеров Azure

Чтобы создать и развернуть приложение контейнера, добавьте azure/container-apps-deploy-action действие в рабочий процесс GitHub Actions.

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

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

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

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

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

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

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

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

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

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

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Внимание

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

Проверка подлинности с помощью Реестр контейнеров Azure

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

Для отправки образов действие автоматически проходит проверку подлинности с помощью реестра контейнеров, указанного в acrName учетных данных, azure/login предоставленных действию.

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

Настройка

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

  • Создание репозитория GitHub для приложения
  • Создание приложения-контейнера с включенным управляемым удостоверением
  • AcrPull Назначение роли для Реестр контейнеров Azure управляемому удостоверению приложения-контейнера
  • Настройка секретов в репозитории GitHub
  • Создание рабочего процесса GitHub Actions

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

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

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

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

  1. Войдите в Azure с помощью Azure CLI.

    az login
    
  2. Затем установите последнее расширение приложений контейнеров Azure для интерфейса командной строки.

    az extension add --name containerapp --upgrade
    
  3. Если у вас нет собственного репозитория GitHub, создайте его из примера.

    1. Перейдите к следующему расположению, чтобы создать новый репозиторий:
    2. Присвойте репозиторию my-container-appимя.
  4. Клонируйте репозиторий на локальный компьютер.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

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

Создайте приложение-контейнер с помощью 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.

Настройка секретов в репозитории GitHub

Рабочий процесс GitHub требует секрета, именованного AZURE_CREDENTIALS для проверки подлинности в Azure. Секрет содержит учетные данные субъекта-службы с ролью участника в группе ресурсов, содержащей приложение контейнера и реестр контейнеров.

  1. Создайте субъект-службу с ролью участника в группе ресурсов, содержащей приложение контейнера и реестр контейнеров.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Замените <SUBSCRIPTION_ID> идентификатором подписки Azure. Если реестр контейнеров находится в другой группе ресурсов, укажите обе группы ресурсов в параметре --scopes .

  2. Скопируйте выходные данные JSON из команды.

  3. В репозитории GitHub перейдите к Параметры> Secrets>Actions и выберите новый секрет репозитория.

  4. Введите AZURE_CREDENTIALS имя и вставьте содержимое выходных данных JSON в качестве значения.

  5. Выберите Добавить секрет.

Создание рабочего процесса GitHub Actions

  1. В репозитории GitHub перейдите к Actions и выберите новый рабочий процесс.

  2. Выберите команду Set up a workflow yourself (Настроить рабочий процесс самостоятельно).

  3. Вставьте следующий YAML в редактор.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Замените <ACR_NAME> именем Реестр контейнеров Azure. Убедитесь, что имя ветви под branches и значениями appSourcePathдля , containerAppNameа также resourceGroup соответствует значениям для репозитория и ресурсов Azure.

  4. Зафиксируйте изменения в главной ветви.

Рабочий процесс GitHub Actions должен начать сборку и развертывание приложения контейнера. Чтобы проверка его ход выполнения, перейдите к разделу "Действия".

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