Непрерывное развертывание в настраиваемых контейнерах в Службе приложений Azure
В этом руководстве описывается настройка непрерывного развертывания для настраиваемого образа контейнера из управляемых репозиториев реестра контейнеров Azure или Docker Hub.
1. Переход в Центр развертывания
На портале Azure перейдите на страницу управления для приложения Службы приложений.
В меню слева выберите Deployment Center>Settings (Центр развертывания > Настройки).
2. Выбор источника развертывания
Выбор источника развертывания зависит от сценария.
- Реестр контейнеров настраивает CI/CD между реестром контейнеров и Службой приложений.
- Параметр GitHub Actions предназначен для вас, если вы поддерживаете исходный код для образа контейнера в GitHub. Действие развертывания, активируемое новыми фиксациями в репозитории GitHub, может запускать
docker build
иdocker push
непосредственно в реестре контейнеров, а затем обновлять приложение Службы приложений для запуска нового образа. Дополнительные сведения см. в разделе Как CI/CD работает с GitHub Actions. - Сведения о настройке CI/CD в Azure Pipelines см. в разделе Развертывание контейнера веб-приложения Azure из Azure Pipelines.
Примечание.
Для приложения Docker Compose выберите Реестр контейнеров.
Если вы выбрали GitHub Actions, щелкните Авторизовать и следуйте инструкциям на экране авторизации. Если вы уже авторизовались с помощью GitHub, то можете выполнить развертывание из репозитория другого пользователя, щелкнув Изменить учетную запись.
После авторизации учетной записи Azure с помощью GitHub выберите организацию, репозиторий и ветвь, откуда должно выполняться развертывание.
2. Настройка параметров реестра
3. Настройка параметров реестра
Примечание.
Контейнеры на стороне (предварительная версия) будут успешно выполнять многоконтейнерные приложения (Docker Compose) в Служба приложений. Сведения о начале работы см. в руководстве по настройке контейнера на стороне для пользовательского контейнера в службе приложение Azure (предварительная версия).
Чтобы развернуть приложение с несколькими контейнерами (Docker Compose), выберите Docker Compose в списке Тип контейнера.
Если раскрывающийся список Тип контейнера не отображается, прокрутите страницу назад до пункта Источник и выберите Реестр контейнеров.
В разделе Источник реестра выберите расположение реестра контейнеров. Если это не Реестр контейнеров Azure и не Docker Hub, выберите частный реестр.
Примечание.
Если приложение с несколькими контейнерами (Docker Compose) использует несколько частных образов, убедитесь, что эти частные образы находятся в одном частном реестре и доступны с одними и теми же учетными данными пользователя. Если приложение с несколькими контейнерами использует только общедоступные образы, выберите Docker Hub, даже если некоторые образы не находятся в Docker Hub.
Выполните следующие действия, выбирая соответствующие вкладки.
В раскрывающемся списке Реестр отображаются реестры из той же подписки, в которой находится ваше приложение. Выберите нужный реестр.
Примечание.
- Если вы хотите использовать управляемые удостоверения для блокировки доступа ACR, выполните следующие действия.
- Чтобы выполнить развертывание из реестра в другой подписке, вместо этого выберите Частный реестр в списке Источник реестра.
Выберите образ и тег для развертывания. При необходимости введите команду запуска в файле запуска.
Выполните следующий шаг в зависимости от типа контейнера.
- Для Docker Compose выберите реестр для частных образов. Щелкните Выбрать файл, чтобы отправить файл Docker Compose, или просто вставьте содержимое файла Docker Compose в файл config.
- Для одного контейнера выберите образ и тег для развертывания. При необходимости введите команду запуска в файле запуска.
Служба приложений добавляет строку в файл запуска в конец команды docker run
(в качестве сегмента [COMMAND] [ARG...]
) при запуске контейнера.
3. Включение CI/CD
4. Включение CI/CD
Служба приложений поддерживает интеграцию CI/CD с Реестром контейнеров Azure и Docker Hub. Чтобы включить ее, выберите On (Вкл.) в разделе Непрерывное развертывание.
Примечание.
Если в поле источника выбрано GitHub Actions, вы не увидите этот параметр, так как обработка CI/CD выполняется непосредственно GitHub Actions. Вместо этого вы увидите раздел Конфигурация рабочего процесса, в котором можно щелкнуть предварительный просмотр файла, чтобы проверить файл рабочего процесса. Azure фиксирует этот файл рабочего процесса в выбранном репозитории GitHub для обработки задач сборки и развертывания. Дополнительные сведения см. в разделе Как CI/CD работает с GitHub Actions.
При включении этого параметра Служба приложений добавляет веб-перехватчик в ваш репозиторий в Реестре контейнеров Azure или Docker Hub. Ваш репозиторий отправляется в этот веб-перехватчик при каждом обновлении выбранного образа с помощью docker push
. Веб-перехватчик вызывает перезапуск и выполнение вашего приложения docker pull
Службы приложений для получения обновленного образа.
Примечание.
Чтобы обеспечить надлежащее функционирование веб-перехватчика, важно включить параметр "Базовые учетные данные для публикации проверки подлинности " в веб-приложении. Сбой этого может привести к 401 несанкционированной ошибке для веб-перехватчика. Чтобы проверить, включена ли базовая проверка подлинности учетных данных публикации , выполните следующие действия.
- Перейдите к общим параметрам конфигурации > веб-приложения.
- Найдите раздел "Параметры платформы", где вы найдете параметр "Базовые учетные данные для публикации проверки подлинности".
Для других частных реестров можно выполнять отправку в веб-перехватчик вручную или в виде шага в конвейере CI/CD. В разделе URL-адрес веб-перехватчика нажмите кнопку Копировать, чтобы получить URL-адрес веб-перехватчика.
Примечание.
Поддержка приложений с несколькими контейнерами (Docker Compose) ограничена следующим образом.
- Для Реестра контейнеров Azure Служба приложений создает веб-перехватчик в выбранном реестре с реестром в качестве области.
docker push
в любой репозиторий в реестре (включая те, на которые не ссылается файл Docker Compose) активирует перезапуск приложения. Вам может потребоваться изменить веб-перехватчик, чтобы сузить область. - Docker Hub не поддерживает веб-перехватчики на уровне реестра. Вы должны вручную добавить веб-перехватчики в образы, указанные в файле Docker Compose.
4. Сохранение параметров
5. Сохранение параметров
Нажмите кнопку Сохранить.
Как CI/CD работает с GitHub Actions
Если в качестве источника вы выбрали GitHub Actions (см. раздел Выбор источника развертывания), Служба приложений настраивает CI/CD следующим образом.
- Помещает файл рабочего процесса GitHub Actions в репозиторий GitHub для обработки задач сборки и развертывания в Службе приложений.
- Добавляет учетные данные для частного реестра в виде секретов GitHub. Созданный файл рабочего процесса выполняет действие Azure/docker-login для входа с помощью частного реестра, а затем запускает
docker push
для развертывания в нем. - Добавляет профиль публикации приложения в качестве секрета GitHub. Созданный файл рабочего процесса использует этот секрет для проверки подлинности в Службе приложений, а затем выполняет действие Azure/webapps-deploy для настройки обновленного образа, который активирует перезапуск приложения для извлечения обновленного образа.
- Захватывает сведения из журналов выполнения рабочего процесса и отображает их на вкладке Журналы в Центре развертывания приложения.
Вы можете настроить поставщик сборки GitHub Actions следующими способами.
- Настройте файл рабочего процесса после его создания в репозитории GitHub. Дополнительные сведения см. в статье о синтаксисе рабочего процесса для GitHub Actions. Просто убедитесь, что рабочий процесс завершается действием Azure//webapps-deploy для активации перезапуска приложения.
- Если выбранная ветвь защищена, вы по-прежнему можете просмотреть файл рабочего процесса без сохранения конфигурации, а затем вручную добавить его и необходимые секреты GitHub в ваш репозиторий. Этот способ не обеспечивает интеграцию журналов с порталом Azure.
- Вместо профиля публикации разверните субъект-службу в идентификаторе Microsoft Entra.
Проверка подлинности с помощью субъекта-службы
Эта необязательная конфигурация заменяет проверку подлинности по умолчанию профилями публикации в созданном файле рабочего процесса.
Создайте субъект-службу с помощью командыaz ad sp create-for-rbac в Azure CLI. В следующем примере замените текст в полях <subscription-id>, <group-name> и <app-name> своими значениями. Сохраните все выходные данные JSON для следующего шага, включая верхний уровень {}
.
az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
Внимание
Чтобы обеспечить безопасность, предоставьте минимально необходимый доступ к субъекту-службе. Область в предыдущем примере ограничена конкретным приложением Службы приложений, а не всей группой ресурсов.
В GitHub перейдите к репозиторию, а затем выберите "Параметры секретов>".> Вставьте все выходные данные JSON, полученные из команды Azure CLI, в поле значения секрета. Присвойте секрету имя, например AZURE_CREDENTIALS
.
В файле рабочего процесса, созданном Центром развертывания, измените шаг azure/webapps-deploy
с помощью кода, показанного в следующем примере:
- name: Sign in to Azure
# Use the GitHub secret you added
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
with:
app-name: '<app-name>'
slot-name: 'production'
images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
- name: Sign out of Azure
run: |
az logout
Автоматизация с помощью CLI
Чтобы настроить реестр контейнеров и образ Docker, выполните команду az webapp config container set.
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'
Чтобы настроить многоконтейнерное приложение (Docker Compose), подготовьте файл Docker Compose локально, а затем выполните команду az webapp config container set с параметром --multicontainer-config-file
. Если файл Docker Compose содержит частные образы, добавьте параметры --docker-registry-server-*
, как показано в предыдущем примере.
az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>
Чтобы настроить CI/CD из реестра контейнеров для приложения, выполните команду az webapp deployment container config с параметром --enable-cd
. Эта команда выводит URL-адрес веб-перехватчика, но вы должны вручную создать веб-перехватчик в реестре на отдельном шаге. В следующем примере включается CI/CD для приложения, а затем с помощью URL-адреса веб-перехватчика в выходных данных создается веб-перехватчик в Реестре контейнеров Azure.
ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)
az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'
Дополнительные ресурсы
- Реестр контейнеров Azure;
- Создание веб-приложения .NET Core в службе приложений на платформе Linux
- Краткое руководство. Запуск пользовательского контейнера на Служба приложений
- Служба приложений под управлением Linux: вопросы и ответы
- Настройка пользовательских контейнеров
- Рабочие процессы действий для развертывания в Azure