Непрерывное развертывание в настраиваемых контейнерах в Службе приложений 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.

Выполните следующие действия, выбирая соответствующие вкладки.

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

Примечание.

Выберитеобраз и тег для развертывания. При необходимости введите команду запуска в файле запуска.

Выполните следующий шаг в зависимости от типа контейнера.

  • Для 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>'

Дополнительные ресурсы