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


Непрерывное развертывание в настраиваемых контейнерах в Службе приложений Azure

Узнайте, как настроить непрерывную интеграцию и непрерывную доставку (CI/CD) для пользовательского образа контейнера из репозиториев управляемого реестра контейнеров Azure или Docker Hub.

1. Перейдите в Центр развертывания

На портале Azure перейдите в область управления для приложения Службы приложений Azure.

В меню слева выберите параметры Настройки центра развертывания.

2. Выбор источника развертывания

Выберите источник развертывания на основе следующих критериев:

  • Реестр контейнеров настраивает CI/CD между реестром контейнеров и Службой приложений.
  • Выберите параметр GitHub Actions , если вы храните исходный код для образа контейнера в GitHub. Новые коммиты в вашем репозитории GitHub запускают действие развертывания, которое может выполняться docker build и docker push непосредственно в реестре контейнеров. Затем оно обновляет приложение App Service, чтобы запускать новый образ. Дополнительные сведения см. в разделе Как 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, выберите частный реестр.

Примечание.

Если приложение с несколькими контейнерами (Docker Compose) использует несколько частных образов, убедитесь, что частные образы находятся в одном частном реестре и доступны с теми же учетными данными пользователя. Если приложение с несколькими контейнерами использует только общедоступные образы, выберите Docker Hub, даже если некоторые образы не используются в Docker Hub.

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

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

Чтобы развернуть из реестра, находящегося в другой подписке, вместо этого выберите частный реестр в источнике реестра.

Сведения об использовании управляемых удостоверений для блокировки доступа к реестру контейнеров Azure см. в статье:

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

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

  • Для Docker Compose выберите реестр для частных образов. Выберите "Выбрать файл " для отправки файла Docker Compose или просто вставьте содержимое файла Docker Compose в Config.
  • Для одного контейнера выберите образ и тег для развертывания. Вы можете ввести команду запуска в файле запуска.

Служба приложений добавляет строку в файл запуска в конец команды docker run(в качестве сегмента [COMMAND] [ARG...]) при запуске контейнера.

3. Включение CI/CD

4. Включение CI/CD

Служба приложений поддерживает интеграцию CI/CD с Реестром контейнеров Azure и Docker Hub. Чтобы включить интеграцию CI/CD, выберите "Включено " в непрерывном развертывании.

Примечание.

Если выбрать 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 ID.

Аутентификация с помощью учетной записи службы

Эта необязательная конфигурация заменяет проверку подлинности по умолчанию профилями публикации в созданном файле рабочего процесса.

Создайте субъект-службу с помощью 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>'