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


Развертывание в приложениях-контейнерах 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 входные данные.

Разверните образы из реестров, отличных от ACR

Помимо реестра контейнеров Azure (ACR), приложения контейнеров Azure поддерживают образы контейнеров, размещенные в других реестрах, таких как реестр контейнеров GitHub (GHCR). В этом разделе показано, как развернуть образы контейнеров из GHCR, включая общедоступные и частные образы.

Замечание

При использовании реестра, отличного от ACR, например GHCR, необходимо настроить приложение-контейнер для проверки подлинности в реестре, даже если образ является общедоступным.

Разверните общедоступный образ из хранилища GHCR.

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

Перед выполнением этой команды замените <YOUR-GITHUB-USERNAME> вашим реальным именем пользователя GitHub.

- name: Deploy public GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:latest
    registryServer: ghcr.io

Перед развертыванием настройте приложение-контейнер для извлечения из GHCR:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io

Развернуть частный образ из GHCR

Если образ является частным, необходимо указать учетные данные проверки подлинности в рабочем процессе GitHub Actions. Используйте персональный токен доступа GitHub (PAT) с областью read:packages. Сохраните маркер и имя пользователя в качестве секретов в репозитории GitHub.

- name: Deploy private GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:${{ github.sha }}
    registryServer: ghcr.io
    registryUsername: ${{ secrets.GHCR_USERNAME }}
    registryPassword: ${{ secrets.GHCR_TOKEN }}

Настройте приложение-контейнер для извлечения образа с помощью учетных данных GHCR:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io \
  --username <GHCR_USERNAME> \
  --password <GHCR_TOKEN>

Замените <GHCR_USERNAME> вашим именем пользователя GitHub и <GHCR_TOKEN> вашим личным маркером доступа соответственно.

Замечание

Используйте уникальный тег, например SHA фиксации Git (${{ github.sha }}), а не универсальный тег, например последний. Это помогает избежать проблем с кэшированием и обеспечивает надежное создание новых исправлений.

Настройка

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

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

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

Требование Инструкции
Учетная запись Azure Если у вас нет учетной записи, создайте бесплатную учетную запись. Чтобы продолжить, вам потребуется разрешение участника или владельца подписки Azure. Дополнительные сведения см. в статье "Назначение ролей Azure" с помощью портал Azure.
Учетная запись GitHub Зарегистрируйтесь бесплатно.
Azure CLI (Интерфейс командной строки для Azure) Установите интерфейс командной строки 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
    

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

  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 перейдите к разделу и выберите > репозитория".

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

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