Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа "Контейнеры приложений Azure" позволяет использовать GitHub Actions для публикации исправлений в приложении-контейнере. При отправке фиксаций в репозиторий GitHub рабочий процесс активируется, который обновляет образ контейнера в реестре контейнеров. Приложения контейнеров Azure создают новую редакцию на основе обновленного образа контейнера.
Рабочий процесс 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.
Войдите в Azure с помощью Azure CLI.
az loginЗатем установите последнее расширение приложений контейнеров Azure для интерфейса командной строки.
az extension add --name containerapp --upgradeЕсли у вас нет собственного репозитория GitHub, создайте его из примера.
- Перейдите к следующему расположению, чтобы создать новый репозиторий:
- Присвойте репозиторию
my-container-appимя.
Клонируйте репозиторий на локальный компьютер.
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
Создание приложения-контейнера с включенным управляемым удостоверением
Создайте приложение-контейнер с помощью az containerapp up команды, выполнив следующие действия. Эта команда создает ресурсы Azure, создает образ контейнера, сохраняет образ в реестре и развертывает его в приложении-контейнере.
После создания приложения вы можете добавить управляемое удостоверение в приложение и назначить удостоверение роли, чтобы позволить удостоверению AcrPull извлекать образы из реестра.
Перейдите в папку src клонированного репозитория.
cd my-container-app cd srcСоздайте ресурсы Azure и разверните приложение-контейнер с
az containerapp upпомощью команды.az containerapp up \ --name my-container-app \ --source . \ --ingress externalВ выходных данных команды запишите имя Реестр контейнеров Azure.
Получите полный идентификатор ресурса реестра контейнеров.
az acr show --name <ACR_NAME> --query id --output tsvЗамените
<ACR_NAME>именем своего реестра.Включите управляемое удостоверение для приложения-контейнера.
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assignedОбратите внимание на идентификатор субъекта управляемого удостоверения в выходных данных команды.
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.Настройте приложение-контейнер, чтобы использовать управляемое удостоверение для извлечения образов из Реестр контейнеров 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. Секрет содержит учетные данные субъекта-службы с ролью участника в группе ресурсов, содержащей приложение контейнера и реестр контейнеров.
Создайте субъект-службу с ролью участника в группе ресурсов, содержащей приложение контейнера и реестр контейнеров.
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.Скопируйте выходные данные JSON из команды.
В репозитории GitHub перейдите к разделу и выберите > репозитория".
Введите
AZURE_CREDENTIALSимя и вставьте содержимое выходных данных JSON в качестве значения.Выберите Добавить секрет.
Создание рабочего процесса GitHub Actions
В репозитории GitHub перейдите к Actions и выберите новый рабочий процесс.
Выберите команду Set up a workflow yourself (Настроить рабочий процесс самостоятельно).
Вставьте следующий 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.Зафиксируйте изменения в главной ветви.
Рабочий процесс GitHub Actions должен начать сборку и развертывание приложения контейнера. Чтобы проверить ход выполнения, перейдите к разделу "Действия".
Чтобы развернуть новую редакцию приложения, отправьте новую фиксацию в основную ветвь.