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