Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как использовать платформу непрерывной интеграции и непрерывной доставки (CI/CD) в GitHub Actions для развертывания веб-приложения Python в Службе приложений Azure в Linux. Рабочий процесс GitHub Actions автоматически создает код и развертывает его в экземпляре службы приложений при наличии фиксации в репозитории. Вы можете добавить другую автоматизацию в рабочий процесс GitHub Actions, например тестовые скрипты, проверки безопасности и многоэтапное развертывание.
Создание репозитория для кода приложения
Для выполнения процедур, описанных в этой статье, требуется веб-приложение Python, зафиксированное в репозитории GitHub.
Существующее приложение. Чтобы использовать существующее веб-приложение Python, убедитесь, что приложение зафиксировано в репозитории GitHub.
Новое приложение: если вам нужно новое веб-приложение на Python, вы можете форкнуть и клонировать репозиторий https://github.com/Microsoft/python-sample-vscode-flask-tutorial на GitHub. Пример кода поддерживает руководство Flask в Visual Studio Code и предоставляет функционирующее приложение Python.
Замечание
Если приложение использует Django и базу данных SQLite , она не будет работать для этих процедур. SQLite не поддерживается в большинстве облачных сред из-за ограничений локального хранилища на основе файлов. Рассмотрите возможность переключения на облачную базу данных, например PostgreSQL или Azure Cosmos DB. Дополнительные сведения см. в разделе "Обзор рекомендаций Django " далее в этой статье.
Создание целевого экземпляра службы приложений
Самый быстрый способ создания экземпляра службы приложений — использовать интерфейс командной строки Azure (CLI) с помощью интерактивной Azure Cloud Shell. Cloud Shell включает Git и Azure CLI. В следующей процедуре вы используете команду az webapp up для создания экземпляра Службы приложений и первоначального развертывания приложения.
Войдите на портал Azure по адресу https://portal.azure.com.
Откройте Azure CLI, выбрав параметр Cloud Shell на панели инструментов портала:
В Cloud Shell выберите параметр Bash в раскрывающемся меню:
В Cloud Shell клонируйте репозиторий с помощью команды клонирования Git .
Подсказка
Чтобы вставить команды или текст в Cloud Shell, используйте сочетание клавиш CTRL+SHIFT+V или щелкните правой кнопкой мыши и выберите команду "Вставить " в контекстном меню.
Для примера приложения Flask можно использовать следующую команду. Замените часть
<github-user>
именем учетной записи GitHub, в которой вы форкнули репозиторий.git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
Если приложение находится в другом репозитории, настройте GitHub Actions для конкретного репозитория. Замените
<github-user>
часть именем вашей учетной записи GitHub, в которой вы сделали форк репозитория, и укажите фактическое имя репозитория в<repo-name>
заполнителе.git clone https://github.com/<github-user>/<repo-name>.git
Замечание
Cloud Shell поддерживается учетной записью хранения Azure в группе ресурсов с именем cloud-shell-storage-your-region<>. Эта учетная запись хранения содержит образ файловой системы Cloud Shell, в которой хранится клонированный репозиторий. За это хранилище взимается небольшая плата. После завершения этой статьи можно удалить учетную запись хранения, а также другие ресурсы, которые вы создаете.
В Cloud Shell измените каталог в папку репозитория для приложения Python, поэтому команда az webapp up распознает приложение как Python. Для примера приложения Flask используйте следующую команду:
cd python-sample-vscode-flask-tutorial
В Cloud Shell используйте команду az webapp up , чтобы создать экземпляр Службы приложений и выполнить начальное развертывание для приложения:
az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
Для
<app-service-name>
местозаполнителя укажите уникальное в Azure имя службы приложений. Имя должно быть длиной 3–60 символов и может содержать только буквы, цифры и дефисы. Имя должно начинаться с буквы и заканчиваться буквой или цифрой.Чтобы получить список доступных сред выполнения в вашей системе, используйте команду
az webapp list-runtimes
.При вводе значения среды выполнения в команде используйте
PYTHON:X.Y
формат, гдеX.Y
находится основная и дополнительная версия Python.Можно также указать расположение региона экземпляра службы приложений с помощью
--location
параметра. Для списка доступных локаций используйте командуaz account list-locations --output table
.
Если в приложении есть пользовательский скрипт запуска, используйте команду az webapp config для запуска скрипта.
Если у вашего приложения нет пользовательского скрипта запуска, перейдите к следующему шагу.
Для примера приложения Flask необходимо получить доступ к скрипту запуска в файлеstartup.txt , выполнив следующую команду:
az webapp config set \ --resource-group <resource-group-name> \ --name <app-service-name> \ --startup-file startup.txt
Укажите имя группы ресурсов и имя экземпляра службы приложений в заполнителях
<resource-group-name>
и<app-service-name>
. Чтобы найти имя группы ресурсов, проверьте выходные данные предыдущейaz webapp up
команды. Имя группы ресурсов включает имя учетной записи Azure, за которой следует _rg суффикс, как в <azure-account-name>_rg_.
Чтобы просмотреть запущенное приложение, откройте браузер и перейдите в конечную точку развертывания для экземпляра службы приложений. В следующем URL-адресе замените
<app-service-name>
заполнитель именем экземпляра службы приложений:http://<app-service-name>.azurewebsites.net
Если отображается универсальная страница, подождите несколько секунд, пока экземпляр службы приложений будет запущен, и обновите страницу.
- Если вы продолжаете видеть универсальную страницу, подтвердите развертывание из правильной папки.
- Для примера приложения Flask проверьте, что вы развернули приложение из папки python-sample-vscode-flask-tutorial. Кроме того, убедитесь, что вы правильно задали команду запуска.
Настройка непрерывного развертывания в Службе приложений
В следующей процедуре вы настроите непрерывную доставку (CD), что означает, что развертывание нового кода происходит всякий раз, когда активируется рабочий процесс. Триггер в примере статьи — это любое изменение основной ветви репозитория, например с пулл-реквестом (PR).
В Cloud Shell убедитесь, что вы находитесь в корневом каталоге для системы (
~
) и не в подпапке приложения, например python-sample-vscode-flask-tutorial.Добавьте GitHub Actions с помощью команды az webapp deployment github-actions add. Замените все заполнители определенными значениями:
az webapp deployment github-actions add \ --repo "<github-user>/<github-repo>" \ --resource-group <resource-group-name> \ --branch <branch-name> \ --name <app-service-name> \ --login-with-github
Параметр
--login-with-github
использует интерактивный метод для получения персонального маркера доступа. Следуйте инструкциям и завершите проверку подлинности.Если система обнаруживает существующий файл рабочего процесса с тем же именем экземпляра службы приложений, следуйте инструкциям, чтобы выбрать, следует ли перезаписать рабочий процесс. Вы можете использовать параметр
--force
вместе с командой для автоматической перезаписи любых конфликтующих рабочих процессов.
Команда
add
выполняет следующие задачи:- Создает новый файл рабочего процесса в github/workflows/<workflow-name>.yml пути в репозитории. Имя файла содержит имя экземпляра службы приложений.
- Извлекает профиль публикации, содержащий секреты, для экземпляра службы приложений и добавляет его в качестве секрета действия GitHub. Имя секрета начинается с AZUREAPPSERVICE_PUBLISHPROFILE_. Этот секрет упоминается в файле рабочего процесса.
Получите сведения о конфигурации развертывания исходного кода с помощью команды az webapp deployment source show. Замените параметры заполнителя определенными значениями:
az webapp deployment source show \ --name <app-service-name> \ --resource-group <resource-group-name>
В выводе команды подтвердите значения свойств
repoUrl
иbranch
. Эти значения должны соответствовать значениям, заданным командойadd
.
Изучение рабочего процесса и действий GitHub
Определение рабочего процесса указывается в файле YAML (.yml) в файле /.github/workflows/ path в репозитории. Этот ФАЙЛ YAML содержит различные шаги и параметры, составляющие рабочий процесс, автоматизированный процесс, связанный с репозиторием GitHub. Вы можете создавать, тестировать, упаковывать, выпускать и развертывать любой проект на GitHub с помощью рабочего процесса.
Каждый рабочий процесс состоит из одного или нескольких заданий, и каждое задание — это набор шагов. Каждый шаг — это скрипт оболочки или действие. Каждое задание содержит раздел "Действие " в файле рабочего процесса.
С точки зрения рабочего процесса, настроенного с помощью кода Python для развертывания в Службе приложений Azure, рабочий процесс имеет следующие действия:
Действие | Описание |
---|---|
оформление заказа | Ознакомьтесь с репозиторием в средстве выполнения, агенте GitHub Actions. |
setup-python | Установите Python на раннер. |
appservice-build | Создайте веб-приложение. |
webapps-deploy | Разверните веб-приложение, используя учетные данные профиля публикации для аутентификации в Azure. Учетные данные хранятся в GitHub secret. |
Шаблон рабочего процесса, используемый для создания рабочего процесса, — azure /actions-workflow-samples.
Рабочий процесс активируется при отправке событий в указанную ветвь. Событие и ветвь определяются в начале файла рабочего процесса. Например, в следующем фрагменте кода показано, что рабочий процесс активируется при отправке событий в основную ветвь:
on:
push:
branches:
- main
Авторизованные приложения OAuth
При настройке непрерывного развертывания вы авторизуете Службу приложений Azure в качестве авторизованного приложения OAuth для учетной записи GitHub. Служба приложений использует авторизованный доступ для создания YAML-файла действия GitHub по пути .github/workflows/<workflow-name>.yml в вашем репозитории.
Чтобы просмотреть авторизованные приложения и отозвать разрешения в учетных записях GitHub, перейдите к разделу "Параметры>интеграции и приложения":
Секрет профиля публикации рабочего процесса
В файле конфигурации рабочего процесса .github/workflows/<workflow-name>.yml, добавленном в ваш репозиторий, есть заполнитель учетных данных для публикации, необходимые для выполнения задания развертывания. Сведения о профиле публикации хранятся в зашифрованном виде в репозитории.
Чтобы просмотреть секрет, перейдите в Настройки>Безопасность>Секреты и переменные>Действия:
В этой статье действие в GitHub проходит проверку подлинности с использованием учетных данных профиля публикации. Существуют другие способы проверки подлинности, например, с помощью служебного принципала или OpenID Connect. Дополнительные сведения см. в разделе "Развертывание в службе приложений" с помощью GitHub Actions.
Запуск и тестирование рабочего процесса
Последним шагом является тестирование рабочего процесса путем внесения изменений в репозиторий.
В браузере перейдите в форк репозитория примера (или используемый вами репозиторий) и выберите ветвь, которую вы указали в качестве части триггера.
Внесите небольшое изменение в веб-приложение Python.
В руководстве Flask вот простое изменение:
- Перейдите к файлу /hello-app/templates/home.html ветви триггера.
- Выберите "Изменить " (карандаш).
- В редакторе найдите указание печати
<p>
и добавьте текст "Переразвернуто!"
Внесите изменение непосредственно в ту ветку, с которой вы работаете.
- В редакторе выберите "Зафиксировать изменения " в правом верхнем углу. Откроется окно Фиксация изменений.
- В окне "Фиксация изменений" измените сообщение фиксации по мере необходимости и выберите "Зафиксировать изменения".
Процесс фиксации активирует рабочий процесс GitHub Actions.
Вы также можете активировать рабочий процесс вручную:
Перейдите на вкладку "Действия " репозитория, настроенного для непрерывного развертывания.
Выберите рабочий процесс в списке рабочих процессов и нажмите кнопку "Выполнить рабочий процесс".
Устранение неисправностей в случае сбоя рабочего процесса
Вы можете проверить состояние рабочего процесса на вкладке "Действия " для репозитория приложения. При изучении файла рабочего процесса, созданного в этой статье, отображаются два задания: сборка и развертывание. Как напоминание, рабочий процесс основан на шаблоне Azure/actions-workflow-samples .
Для неудачного задания изучите результаты выполнения задач, чтобы определить причину сбоя.
Ниже приведены некоторые распространенные проблемы для изучения:
Если приложение завершается ошибкой из-за отсутствующей зависимости, файл requirements.txt не был обработан во время развертывания. Это происходит, если вы создали веб-приложение непосредственно на портале, а не с помощью
az webapp up
команды, как показано в этой статье.Если вы развернули службу приложений через портал, параметр сборки
SCM_DO_BUILD_DURING_DEPLOYMENT
может не быть установлен. Этот параметр должен иметь значениеtrue
. Командаaz webapp up
автоматически задает действие сборки.Если отображается сообщение об ошибке "Время ожидания подтверждения TLS", запустите рабочий процесс вручную, нажав кнопку "Активировать автоматическое развертывание " на вкладке "Действия " репозитория приложения. Вы можете определить, является ли время ожидания временным.
Если вы настроили непрерывное развертывание для приложения-контейнера, как показано в этой статье, исходный файл рабочего процесса .github/<workflow-name>.yml создается автоматически. Если вы изменили файл, удалите изменения, чтобы узнать, вызывает ли они сбой.
Запуск скрипта после развертывания
Скрипт после развертывания может выполнять несколько задач, таких как определение переменных среды, ожидаемых кодом приложения. Скрипт добавляется в код приложения и выполняется с помощью команды запуска.
Чтобы избежать жесткого кодирования значений переменных в файле YAML рабочего процесса, попробуйте настроить переменные в GitHub и ссылаться на имена переменных в скрипте. Вы можете создать зашифрованные секреты для репозитория или среды (репозиторий учетных записей). Дополнительные сведения см. в разделе "Использование секретов" в GitHub Actions.
Ознакомьтесь с рекомендациями по Django
Как упоминалось ранее в этой статье, вы можете использовать GitHub Actions для развертывания приложений Django в Службе приложений Azure в Linux, если вы используете отдельную базу данных. Невозможно использовать базу данных SQLite, так как служба приложений блокирует файл db.sqlite3 , который предотвращает чтение и запись. Это поведение не влияет на внешнюю базу данных.
В статье "Настройка приложения Python в службе приложений — процесс запуска контейнера " описывается, как служба приложений автоматически ищет файл wsgi.py в коде приложения, который обычно содержит объект приложения. При использовании команды webapp config set
для задания команды запуска вы использовали параметр --startup-file
для указания файла, содержащего объект приложения. Команда webapp config set
недоступна в действии webapps-deploy. Вместо этого можно использовать startup-command
параметр для указания команды запуска. Например, в следующем коде показано, как указать команду запуска в файле рабочего процесса:
startup-command: startup.txt
При использовании Django обычно требуется перенести модели данных с помощью python manage.py migrate
команды после развертывания кода приложения. Вы можете выполнить команду миграции в скрипте после развертывания.
Отключение действий GitHub
Отключение GitHub Actions от экземпляра службы приложений позволяет перенастроить развертывание приложения. Вы можете выбрать, что происходит с файлом рабочего процесса после отключения, а также сохранить или удалить файл.
Отключите GitHub Actions с помощью следующей команды Azure CLI az webapp deployment github-actions remove. Замените все заполнители определенными значениями:
az webapp deployment github-actions remove \
--repo "<github-username>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
Очистите ресурсы
Чтобы избежать возникновения расходов на ресурсы Azure, созданные в этой статье, удалите группу ресурсов, содержащую экземпляр службы приложений и план службы приложений.
В любом месте установки Azure CLI, включая Azure Cloud Shell, можно использовать команду az group delete для удаления группы ресурсов:
az group delete --name <resource-group-name>
Удаление учетной записи хранения
Чтобы удалить учетную запись хранения, поддерживающую файловую систему для Cloud Shell и взимающую небольшую ежемесячную плату, удалите группу ресурсов, имя которой начинается с cloud-shell-storage-. Если вы являетесь единственным пользователем группы, это безопасно удалить группу ресурсов. Если есть другие пользователи, вы можете удалить учетную запись хранения в группе ресурсов.
Обновление учетной записи и репозитория GitHub
Если удалить группу ресурсов Azure, попробуйте внести следующие изменения в учетную запись GitHub и репозиторий, подключенный для непрерывного развертывания:
- В репозитории приложений удалите файл .github/workflows/<workflow-name>.yml .
- В параметрах репозитория приложений удалите ключ секрета AZUREAPPSERVICE_PUBLISHPROFILE_ , созданный для рабочего процесса.
- В параметрах учетной записи GitHub удалите службу приложений Azure в качестве авторизованного приложения Oauth для учетной записи GitHub.