Использование Azure Pipelines для создания и развертывания веб-приложения Python в службе приложение Azure
Azure DevOps Services
Используйте Azure Pipelines для непрерывной интеграции и непрерывной доставки (CI/CD) для создания и развертывания веб-приложения Python для приложение Azure службы в Linux. Конвейер автоматически создает и развертывает веб-приложение Python для Служба приложений при наличии фиксации в репозитории.
Вы узнаете, как выполнять следующие задачи:
- создавать веб-приложения в службе приложений Azure;
- Создайте проект в Azure DevOps.
- Подключите проект DevOps к Azure.
- Создайте конвейер, зависящий от Python.
- Запустите конвейер, чтобы создать и развернуть приложение в веб-приложении в Служба приложений.
Необходимые компоненты
- Подписка Azure. Если ее нет, создайте бесплатную учетную запись.
- Учетная запись GitHub. Если у вас ее нет, создайте подписку бесплатно.
- Организация Azure DevOps Services. Создайте ее бесплатно.
- Подписка Azure. Если ее нет, создайте бесплатную учетную запись.
- Учетная запись GitHub. Если у вас ее нет, создайте подписку бесплатно.
- Сервер Azure DevOps.
- Локальный агент. Если вам нужно создать локальный агент, см. раздел "Локальные агенты".
Создание репозитория для кода приложения
Вилку примера репозитория в https://github.com/Microsoft/python-sample-vscode-flask-tutorial учетную запись GitHub.
На локальном узле клонируйте репозиторий GitHub. Используйте следующую команду, заменив <repository-url>
URL-адрес вилированного репозитория.
git clone <repository-url>
Локальное тестирование приложения
Создайте и запустите приложение локально, чтобы убедиться, что оно работает.
Перейдите в клонированную папку репозитория.
cd python-sample-vscode-flask-tutorial
Сборка и запуск приложения
python -m venv .env source .env/bin/activate pip install --upgrade pip pip install -r ./requirements.txt export set FLASK_APP=hello_app.webapp python3 -m flask run
Чтобы просмотреть приложение, откройте окно браузера и перейдите к ней http://localhost:5000. Убедитесь, что вы видите заголовок
Visual Studio Flask Tutorial
.По завершении закройте окно браузера и остановите сервер Flask с помощью ctrl+C.
Открытие окна Cloud Shell
Войдите на портал Azure по адресу https://portal.azure.com.
Откройте Azure CLI, нажав кнопку Cloud Shell на панели инструментов портала.
Cloud Shell отображается в нижней части браузера. Выберите Bash в раскрывающемся меню.
Чтобы предоставить вам больше места для работы, нажмите кнопку "Развернуть".
Создание веб-приложения службы приложение Azure
Создайте веб-приложение службы приложение Azure из Cloud Shell в портал Azure.
Совет
Чтобы вставить в Cloud Shell, нажмите клавиши CTRL+SHIFT+V или щелкните правой кнопкой мыши и выберите "Вставить" в контекстном меню.
Клонируйте репозиторий с помощью следующей команды, заменив
<repository-url>
URL-адрес вилированного репозитория.git clone <repository-url>
Измените каталог на клонированную папку репозитория, поэтому
az webapp up
команда распознает приложение как приложение Python.cd python-sample-vscode-flask-tutorial
Используйте команду az webapp up, чтобы подготовить Служба приложений и выполнить первое развертывание приложения. Замените
<your-web-app-name>
на имя, уникальное в Azure. Как правило, вы используете личное или корпоративное имя вместе с идентификатором приложения, например<your-name>-flaskpipelines
. URL-адрес приложения становится your-appservice.azurewebsites.net>.<az webapp up --name <your-web-app-name>
Выходные данные
az webapp up
JSON команды показывают:{ "URL": <your-web-app-url>, "appserviceplan": <your-app-service-plan-name>, "location": <your-azure-location>, "name": <your-web-app-name>, "os": "Linux", "resourcegroup": <your-resource-group>, "runtime_version": "python|3.11", "runtime_version_detected": "-", "sku": <sku>, "src_path": <repository-source-path> }
Обратите внимание на
URL
значения иruntime_version
значения. Используетсяruntime_version
в файле YAML конвейера. ЭтоURL
URL-адрес веб-приложения. Его можно использовать, чтобы убедиться, что приложение запущено.Примечание.
Команда
az webapp up
выполняет следующие действия:создание группы ресурсов по умолчанию;
создание плана службы приложений по умолчанию;
создание приложения с указанным именем.
Zip-файл развертывает все файлы из текущего рабочего каталога с включенной автоматизацией сборки.
Локальное кэширование параметров в файле .azure/config, позволяющее не указывать их снова при последующем развертывании с помощью
az webapp up
или других командaz webapp
из папки проекта. По умолчанию кэшированные значения используются автоматически.
Действие по умолчанию можно переопределить собственными значениями с помощью параметров команды. Дополнительные сведения см. в az webapp up.
В приложении python-sample-vscode-flask-tutorial есть файл startup.txt , содержащий определенную команду запуска для веб-приложения. Задайте для свойства конфигурации веб-приложения
startup-file
значениеstartup.txt
.Скопируйте
resourcegroup
значение из выходныхaz webapp up
данных команды.Введите следующую команду, используя группу ресурсов и имя приложения.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
По завершении команды отображаются выходные данные JSON, содержащие все параметры конфигурации для веб-приложения.
Чтобы увидеть запущенное приложение, откройте браузер и перейдите к
URL
показанному в выходныхaz webapp up
данных команды. Если вы видите универсальную страницу, подождите несколько секунд до начала Служба приложений, а затем обновите страницу. Убедитесь, что вы видите заголовокVisual Studio Flask Tutorial
.
Создание проекта Azure DevOps
Создайте проект Azure DevOps.
- В браузере перейдите к dev.azure.com и войдите в систему.
- Выберите свою организацию.
- Создайте новый проект, выбрав новый проект или создав проект при создании первого проекта в организации.
- Заполните поле Имя проекта.
- Выберите видимость проекта.
- Нажмите кнопку создания.
- В браузере перейдите на сервер Azure DevOps Server.
- Выберите коллекцию.
- Создайте новый проект, выбрав новый проект или создав проект при создании первого проекта в коллекции.
- Заполните поле Имя проекта.
- Выберите видимость проекта.
- Нажмите кнопку создания.
Создание субъекта-службы
Субъект-служба — это удостоверение, созданное для использования с приложениями, размещенными службами и автоматизированными инструментами для доступа к ресурсам Azure. Этот доступ ограничен ролями, назначенными субъекту-службе, что позволяет контролировать доступ к ресурсам и на каком уровне.
Чтобы создать субъект-службу, перейдите в cloud shell (bash) и выполните следующую команду. Замените <service-principal-name>
именем субъекта-службы, <your-subscription-id>
идентификатором подписки и <your-resource-group>
группой ресурсов для веб-приложения.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
Команда возвращает объект JSON, аналогичный следующему примеру:
{
"clientId": "<client GUID>",
"clientSecret": "<string-value>",
"subscriptionId": "<subscription GUID>",
"tenantId": "<tenant GUID>",
...
}
Запишите clientId
значения , clientSecret
subscriptionId
и tenantId
значения. Эти значения необходимы для создания подключения к службе в следующем разделе.
Создание подключения службы
Подключение службы позволяет создать подключение для предоставления аутентифицированного доступа из Azure Pipelines к внешним и удаленным службам. Чтобы развернуть веб-приложение службы приложение Azure, создайте подключение службы к группе ресурсов, содержащей веб-приложение.
На странице проекта выберите параметры проекта.
Выберите подключения службы в разделе "Конвейеры" в меню.
Выберите Создать подключение к службе.
Выберите Azure Resource Manager и нажмите кнопку "Далее".
Выберите метод проверки подлинности и нажмите кнопку "Далее".
В диалоговом окне "Новое подключение службы Azure" введите сведения, относящиеся к выбранному методу проверки подлинности. Дополнительные сведения о методах проверки подлинности см. в статье "Подключение к Azure" с помощью подключения службы Azure Resource Manager.
Например, если вы используете федерацию удостоверений рабочей нагрузки (автоматически) или метод проверки подлинности субъекта-службы (автоматически), введите необходимые сведения.
Поле Description Уровень области Выберите Подписка. Подписка Имя подписки Azure. Группа ресурсов Имя группы ресурсов, содержащей веб-приложение. Имя подключения службы Описательное имя подключения. Предоставление разрешений доступа всем конвейерам Выберите этот параметр, чтобы предоставить доступ ко всем конвейерам. Выберите Сохранить.
Новое подключение отображается в списке подключений службы и готово к использованию в Azure Pipeline.
На странице проекта выберите параметры проекта.
Выберите подключения службы в разделе "Конвейеры" в меню.
Выберите Создать подключение к службе.
Выберите Azure Resource Manager и нажмите кнопку "Далее".
В новом подключении службы Azure выберите субъект-службу (вручную) и нажмите кнопку "Далее"
В следующем диалоговом окне укажите необходимые сведения.
Поле Description Среда Выберите Azure Cloud
.Уровень области Выберите Подписка. Идентификатор подписки Идентификатор подписки. Имя подписки Имя подписки Azure. Идентификатор субъекта-службы Значение appId
объекта JSON, возвращаемого командойaz ad sp create-for-rbac
.Ключ субъекта-службы Значение password
объекта JSON, возвращаемого командойaz ad sp create-for-rbac
.Идентификатор клиента Значение tenant
объекта JSON, возвращаемого командойaz ad sp create-for-rbac
.Нажмите кнопку "Проверить" , чтобы проверить подключение.
Введите имя подключения службы.
Убедитесь, что выбрано разрешение на доступ ко всем конвейерам .
Выберите " Проверить и сохранить".
Новое подключение отображается в списке подключений службы и готово к использованию Azure Pipelines из проекта.
Настройка локального агента
Если вы используете собственный локальный агент, необходимо настроить агент для запуска Python. Скачивание версий Python не поддерживается для локальных агентов. Необходимо предварительно установить версию Python. Используйте полный установщик, чтобы получить версию Python, совместимую с pip.
Чтобы избежать несовместимых проблем, следует сопоставить версию Python с версией среды выполнения в веб-приложении приложение Azure Services. Версия среды выполнения отображается в выходных данных az webapp up
JSON команды.
Требуемая версия Python должна быть добавлена в кэш инструментов в локальном агенте, чтобы задача может использовать ее. Как правило, кэш инструментов находится в каталоге _work/_tool агента; Кроме того, путь можно переопределить с помощью переменной среды AGENT_TOOLSDIRECTORY. В каталоге средств создайте следующую структуру каталогов на основе версии Python:
$AGENT_TOOLSDIRECTORY/
Python/
{version number}/
{platform}/
{tool files}
{platform}.complete
Номер версии должен соответствовать формату 1.2.3. Платформа должна быть либо x86, либо x64. Файлы инструментов должны быть распакованными файлами версии Python. Должен {platform}.complete
быть 0-байтовый файл, который выглядит как x86.complete
или x64.complete
просто означает, что средство правильно установлено в кэше.
Например, если вы используете Python 3.11 на 64-разрядном компьютере Windows, структура каталогов будет выглядеть следующим образом:
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Если у вас уже есть версия Python, которую вы хотите использовать на компьютере, на котором размещен агент, можно скопировать файлы в кэш инструментов. Если у вас нет версии Python, ее можно скачать на веб-сайте Python.
Создание конвейера
Создайте конвейер для создания и развертывания веб-приложения Python в службе приложение Azure. Чтобы понять основные понятия конвейера, просмотрите:
В меню навигации слева выберите "Конвейеры".
Выберите Создать конвейер.
В диалоговом окне " Где находится код " выберите GitHub. Возможно, вам будет предложено войти в GitHub.
На экране "Выбор репозитория" выберите вилку репозитория.
Возможно, вам будет предложено ввести пароль GitHub еще раз в качестве подтверждения.
Если расширение Azure Pipelines не установлено на сайте GitHub, GitHub предложит установить расширение Azure Pipelines .
На этой странице прокрутите вниз до раздела доступа к репозиторию, выберите, следует ли установить расширение на все репозитории или только выбранные, а затем нажмите кнопку "Утвердить и установить".
В диалоговом окне "Настройка конвейера" выберите Python для веб-приложения Linux в Azure.
Выберите подписку Azure и нажмите кнопку "Продолжить".
Если вы используете имя пользователя и пароль для проверки подлинности, браузер откроется для входа в учетную запись Майкрософт.
Выберите имя веб-приложения в раскрывающемся списке и выберите " Проверить и настроить".
Azure Pipelines создает файл azure-pipelines.yml и отображает его в редакторе конвейеров YAML. Файл конвейера определяет конвейер CI/CD в виде ряда этапов, заданий и шагов, где каждый шаг содержит сведения о различных задачах и сценариях. Изучите работу конвейера. Убедитесь, что все входные данные по умолчанию подходят для кода.
В меню навигации выберите "Конвейеры".
Выберите Создать конвейер.
В диалоговом окне " Где находится код " выберите GitHub Enterprise Server. Возможно, вам будет предложено войти в GitHub.
На вкладке "Выбор репозитория " выберите вилку репозитория.
Возможно, вам будет предложено ввести пароль GitHub еще раз в качестве подтверждения.
Если расширение Azure Pipelines не установлено на сайте GitHub, GitHub предложит установить расширение Azure Pipelines .
На этой странице прокрутите вниз до раздела доступа к репозиторию, выберите, следует ли установить расширение на все репозитории или только выбранные, а затем нажмите кнопку "Утвердить и установить".
В диалоговом окне "Настройка конвейера" выберите "Начальный конвейер".
Замените содержимое файла azure-pipelines.yml следующим кодом.
trigger: - main variables: # Azure Resource Manager connection created during pipeline creation azureServiceConnectionId: '<your-service-connection-name>' # Web app name webAppName: '<your-web-app-name>' # Environment name environmentName: '<your-web-app-name>' # Project root folder. projectRoot: $(System.DefaultWorkingDirectory) # Python version: pythonVersion: '<your-python-version>' stages: - stage: Build displayName: Build stage jobs: - job: BuildJob pool: name: '<your-pool-name>' demands: python steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install -r requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements" - task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - stage: Deploy displayName: 'Deploy Web App' dependsOn: Build condition: succeeded() jobs: - deployment: DeploymentJob pool: name: '<your-pool-name' environment: $(environmentName) strategy: runOnce: deploy: steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version' - task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Замените следующие заполнители собственными значениями:
Заполнитель Description <your-service-connection-name>
Имя созданного подключения службы. <your-web-app-name>
Имя веб-приложения службы приложение Azure. <your-pool-name>
Имя пула агентов, который вы хотите использовать. <your-python-version>
Версия Python, запущенная в агенте. Рекомендуется сопоставить эту версию с версией Python, работающей в веб-приложении. Версия веб-приложения отображается в выходных az webapp up
данных JSON команды.
Файл конвейера YAML
В следующем объяснении описывается файл конвейера YAML. Дополнительные сведения о схеме файлов YAML конвейера см . в справочнике по схеме YAML.
Ниже показан полный пример файла YAML конвейера:
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder. Point to the folder containing manage.py file.
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.11'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Переменные
В variables
разделе содержатся следующие переменные:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to match the Python runtime version running on your web app.
pythonVersion: '3.11'
Переменная | Description |
---|---|
azureServiceConnectionId |
Идентификатор или имя подключения службы Azure Resource Manager. |
webAppName |
Имя веб-приложения службы приложение Azure. |
vmImageName |
Имя операционной системы, используемой для агента сборки. |
environmentName |
Имя среды, используемой на этапе развертывания. Среда автоматически создается при выполнении задания этапа. |
projectRoot |
Корневая папка, содержащая код приложения. |
pythonVersion |
Версия Python, используемая в агентах сборки и развертывания. |
В variables
разделе содержатся следующие переменные:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<your-service-connection-name>'
# Web app name
webAppName: '<your-webapp-name>'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to the version that is running on your agent and web app.
pythonVersion: '3.11'
Переменная | Description |
---|---|
azureServiceConnectionId |
Имя подключения службы Azure Resource Manager. |
webAppName |
имя веб-приложения. |
environmentName |
Имя среды, используемой на этапе развертывания. |
projectRoot |
Папка, содержащая код приложения. Это значение является автоматической системной переменной. |
pythonVersion |
Версия Python, используемая в агентах сборки и развертывания. |
Этап сборки
Этап сборки содержит одно задание, которое выполняется в операционной системе, определенной в переменной vmImageName.
- job: BuildJob
pool:
vmImage: $(vmImageName)
Этап сборки содержит одно задание, которое выполняется в агенте в пуле, определяемом параметром имени. Вы можете указать возможности агента с помощью ключевого demands
слова. Например, указывает, demands: python
что агент должен быть установлен на Python. Чтобы указать локальный агент по имени, можно использовать ключевое demands: Agent.Name -equals <agent-name>
слово.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
Задание содержит несколько шагов:
Задача UsePythonVersion выбирает версию Python для использования. Версия определена в переменной
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'
На этом шаге используется скрипт для создания виртуальной среды Python и установки зависимостей приложения, содержащихся в
requirements.txt
параметре,workingDirectory
указывает расположение кода приложения.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"
Задача ArchiveFiles создает архив .zip , содержащий веб-приложение. Файл
.zip
передается в конвейер в качестве артефакта с именемdrop
. Файл.zip
используется на этапе развертывания для развертывания приложения в веб-приложении.- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop
Параметр Description rootFolderOrFile
Расположение кода приложения. includeRootFolder
Указывает, следует ли включить корневую папку в файл .zip . Задайте для этого параметра false
значение в противном случае, содержимое файла .zip помещаются в папку с именем s и контейнер Служба приложений в Linux не может найти код приложения.archiveType
Тип создаваемого архива. Задайте значение zip
.archiveFile
Расположение создаваемого файла .zip . replaceExistingArchive
Указывает, следует ли заменить существующий архив, если файл уже существует. Задайте значение true
.upload
Расположение файла .zip для отправки. artifact
Имя создаваемого артефакта.
Этап развертывания
Этап развертывания выполняется, если этап сборки завершается успешно. Следующие ключевые слова определяют это поведение:
dependsOn: Build
condition: succeeded()
Этап развертывания содержит одно задание развертывания, настроенное со следующими ключевыми словами:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Ключевое слово | Description |
---|---|
deployment |
Указывает, что задание является заданием развертывания, предназначенным для среды. |
pool |
Указывает пул агентов развертывания. Пул агентов по умолчанию, если имя не указано. Ключевое vmImage слово определяет операционную систему для образа виртуальной машины агента. |
environment |
Указывает среду для развертывания. Среда автоматически создается в проекте при запуске задания. |
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Ключевое слово | Description |
---|---|
deployment |
Указывает, что задание является заданием развертывания, предназначенным для среды. |
pool Указывает пул агентов, используемый для развертывания. Этот пул должен содержать агент с возможностью запуска версии Python, указанной в конвейере. |
|
environment |
Указывает среду для развертывания. Среда автоматически создается в проекте при запуске задания. |
Ключевое strategy
слово используется для определения стратегии развертывания. Ключевое runOnce
слово указывает, что задание развертывания выполняется один раз. Ключевое deploy
слово указывает шаги, выполняемые в задании развертывания.
strategy:
runOnce:
deploy:
steps:
В steps
конвейере используются следующие функции:
Используйте задачу UsePythonVersion, чтобы указать версию Python, используемую в агенте. Версия определена в переменной
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Разверните веб-приложение с помощью AzureWebApp@1. Эта задача развертывает артефакт
drop
конвейера в веб-приложении.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Параметр Description azureSubscription
Идентификатор или имя подключения службы Azure Resource Manager. appName
имя веб-приложения. package
Расположение развернутого файла .zip . Кроме того, так как репозиторий python-vscode-flask-tutorial содержит ту же команду запуска в файле с именем startup.txt, вы можете указать этот файл, добавив параметр:
startUpCommand: 'startup.txt'
В steps
конвейере используются следующие функции:
Используйте задачу UsePythonVersion, чтобы указать версию Python, используемую в агенте. Версия определена в переменной
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Разверните веб-приложение с помощью AzureWebApp@1. Эта задача развертывает артефакт
drop
конвейера в веб-приложении.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Параметр Description azureSubscription
Идентификатор или имя подключения службы Azure Resource Manager. appName
имя веб-приложения. package
Расположение развернутого файла .zip . Кроме того, так как репозиторий python-vscode-flask-tutorial содержит ту же команду запуска в файле с именем startup.txt, вы можете указать этот файл, добавив параметр:
startUpCommand: 'startup.txt'
- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : $(webAppName)' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Параметр Description azureSubscription
Идентификатор или имя подключения службы Azure Resource Manager. appName
имя веб-приложения. package
Расположение развернутого файла .zip . startUpCommand
Команда, выполняемая после развертывания приложения. В примере приложения используется startup.txt
.
Запуск конвейера
Теперь вы готовы попробовать его!
В редакторе нажмите кнопку "Сохранить и запустить".
В диалоговом окне "Сохранить и запустить" добавьте сообщение фиксации, а затем нажмите кнопку "Сохранить и запустить".
Конвейер можно наблюдать за выполнением, выбрав этапы или задания в сводке по выполнению конвейера.
Рядом с каждым этапом и заданием рядом с каждым этапом и заданием по мере успешного завершения есть зеленые флажки. Если возникают ошибки, они отображаются в сводке или в шагах задания.
Вы можете быстро вернуться в редактор YAML, выбрав вертикальные точки в правом верхнем углу страницы "Сводка " и выбрав "Изменить конвейер":
В задании развертывания выберите задачу "Развернуть веб-приложение Azure", чтобы отобразить выходные данные. Чтобы посетить развернутый сайт, удерживайте клавишу CTRL и выберите URL-адрес после
App Service Application URL
.Если вы используете пример приложения, приложение должно выглядеть следующим образом:
Внимание
Если приложение завершается ошибкой из-за отсутствующих зависимостей, requirements.txt файл не был обработан во время развертывания. Это происходит, если вы создали веб-приложение непосредственно на портале, а не с помощью az webapp up
команды, как показано в этой статье.
Команда az webapp up
специально задает действие SCM_DO_BUILD_DURING_DEPLOYMENT
true
сборки. Если вы подготовили службу приложений через портал, это действие не устанавливается автоматически.
Ниже описано, как задать действие.
- Откройте портал Azure, выберите Служба приложений, а затем выберите "Конфигурация".
- На вкладке "Параметры приложения" выберите "Создать приложение".
- В появившемся всплывающем ок задайте имя
SCM_DO_BUILD_DURING_DEPLOYMENT
, задайте значение "Значениеtrue
" и нажмите кнопку "ОК". - Нажмите кнопку Сохранить в верхней части страницы Конфигурация.
- Повторный запуск конвейера. Зависимости должны быть установлены во время развертывания.
Активация выполнения конвейера
Чтобы активировать запуск конвейера, зафиксируйте изменение в репозитории. Например, можно добавить новую функцию в приложение или обновить зависимости приложения.
- Перейдите в репозиторий GitHub.
- Внесите изменения в код, например изменение названия приложения.
- Зафиксируйте изменение в репозитории.
- Перейдите к конвейеру и проверьте создание нового запуска.
- По завершении выполнения убедитесь, что новая сборка развернута в веб-приложении.
- Откройте портал Azure и перейдите к своему веб-приложению.
- Выберите Центр развертывания и перейдите на вкладку "Журналы ".
- Убедитесь, что новое развертывание указано.
Рекомендации по Django
Azure Pipelines можно использовать для развертывания приложений Django для приложение Azure службы в Linux, если вы используете отдельную базу данных. Невозможно использовать базу данных SQLite, так как Служба приложений блокирует файл db.sqlite3, предотвращая операции чтения и записи. Это поведение не влияет на внешнюю базу данных.
Как описано в разделе "Настройка приложения Python на Служба приложений — процесс запуска контейнера", Служба приложений автоматически ищет файл wsgi.py в коде приложения, который обычно содержит объект приложения. Если вы хотите настроить команду запуска каким-либо образом, используйте startUpCommand
параметр на AzureWebApp@1
шаге файла конвейера YAML, как описано в предыдущем разделе.
При использовании Django обычно требуется перенести модели данных, используя manage.py migrate
после развертывания кода приложения. Для этого можно добавить startUpCommand
скрипт после развертывания. Например, вот startUpCommand
свойство в задаче AzureWebApp@1.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'python manage.py migrate'
Выполнение тестов в агенте сборки
В процессе сборки может потребоваться выполнить тесты в коде приложения. Тесты выполняются в агенте сборки, поэтому необходимо установить зависимости в виртуальную среду в агенте сборки. После выполнения тестов удалите виртуальную среду перед созданием файла .zip для развертывания. Следующие элементы скрипта иллюстрируют этот процесс. Поместите их перед задачей ArchiveFiles@2
в файле azure-pipelines.yml . Дополнительные сведения см. в разделе "Запуск кроссплатформенных сценариев".
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r requirements.txt
# The displayName shows in the pipeline UI when a build runs
displayName: 'Install dependencies on build agent'
- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'
Вы также можете использовать задачу, например PublishTestResults@2 для публикации результатов теста в конвейере. Дополнительные сведения см. в статье "Создание приложений Python — запуск тестов".
Очистка ресурсов
Чтобы избежать возникновения расходов на ресурсы Azure, созданные в этом руководстве, выполните следующие действия.
Удалите созданный проект. При удалении проекта удаляется подключение конвейера и службы.
Удалите группу ресурсов Azure, содержащую Служба приложений и план Служба приложений. В портал Azure перейдите в группу ресурсов, выберите "Удалить группу ресурсов" и следуйте инструкциям.
Удалите учетную запись хранения, которая поддерживает файловую систему для Cloud Shell. Закройте Cloud Shell, а затем перейдите в группу ресурсов, которая начинается с cloud-shell-storage, выберите "Удалить группу ресурсов" и следуйте инструкциям.