Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Azure DevOps Services
В этом руководстве показано, как использовать Azure Pipelines для непрерывной интеграции и непрерывной доставки (CI/CD) для создания и развертывания веб-приложения Python в Службе приложений Azure в Linux. Конвейер автоматически создает и развертывает веб-приложение Python в Службе приложений при наличии фиксации в репозитории кода приложения.
Изучив это руководство, вы:
- Создайте веб-приложение Python и отправьте его в службу приложений Azure.
- Подключите проект Azure DevOps к Azure.
- Создайте конвейер сборки и развертывания azure Pipelines для Python для приложения.
- Запустите конвейер для сборки, тестирования и развертывания в веб-приложении Службы приложений Azure.
- Задайте триггер для запуска конвейера при фиксации в репозитории.
Дополнительные сведения о концепциях Azure Pipelines см. в следующем видео:
Предварительные условия
| Продукт | Требования |
|---|---|
| Azure DevOps | - Проект Azure DevOps. — способность запуска потоков на хостинговых агентах Microsoft. Вы можете приобрести параллельное задание или запросить уровень "Бесплатный". — Базовые знания о YAML и Azure Pipelines. Дополнительные сведения см. в разделе Создайте ваш первый конвейер. Разрешения - : — Чтобы создать конвейер: необходимо быть в группе Участников, и у группы должно быть разрешение создать конвейер сборки установлено на "Разрешить". Члены группы "Администраторы проектов" могут управлять конвейерами. — Для создания подключений к службам необходимо иметь роль администратора или создателя для подключений служб. |
| GitHub | — учетная запись GitHub. - Подключение службы GitHub для авторизации Azure Pipelines. |
| Лазурный | Подписка Azure |
| Продукт | Требования |
|---|---|
| Azure DevOps | - Проект Azure DevOps. — самостоятельно размещённый агент. Сведения о создании см. в разделе "Локальные агенты". — Базовые знания о YAML и Azure Pipelines. Дополнительные сведения см. в разделе Создайте ваш первый конвейер. Разрешения - : — Чтобы создать конвейер: необходимо быть в группе Участников, и у группы должно быть разрешение создать конвейер сборки установлено на "Разрешить". Члены группы "Администраторы проектов" могут управлять конвейерами. — Для создания подключений к службам необходимо иметь роль администратора или создателя для подключений служб. |
| GitHub | — учетная запись GitHub. - Подключение службы GitHub для авторизации Azure Pipelines. |
| Лазурный | Подписка Azure |
Настройка локального агента
Скачивание версий Python не поддерживается в локальных агентах сборки. Чтобы использовать собственный локальный агент, необходимо настроить агент для запуска Python.
Чтобы избежать проблем совместимости, сопоставляйте версию Python с версией среды выполнения в веб-приложении служб приложений Azure, 3.11 в этом случае. Необходимо предварительно установить версию Python. Используйте полный установщик, чтобы получить версию Python, совместимую с pip.
Требуемая версия 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.
Подготовка примера приложения
Сделайте форк образца репозитория в вашем аккаунте GitHub на https://github.com/Microsoft/python-sample-vscode-flask-tutorial.
Клонируйте вилку на локальный компьютер с помощью
git clone <your-forked-repository-url>.git.Перейдите к локальному клону, используя его,
cd python-sample-vscode-flask-tutorialи создайте и запустите приложение локально, чтобы убедиться, что оно работает.python -m venv .env source .env/Scripts/activate pip install --upgrade pip pip install -r ./requirements.txt export FLASK_APP=hello_app.webapp flask runЧтобы протестировать приложение, перейдите http://localhost:5000 в окно браузера и убедитесь, что вы видите название Visual Studio Flask Tutorial.
Закройте окно браузера и остановите сервер Flask с помощью клавиш CTRL+C.
Создание и развертывание веб-приложения службы приложений
Создайте веб-приложение Службы приложений Azure с помощью Cloud Shell на портале Azure. Чтобы использовать Cloud Shell, войдите на портал Azure и нажмите кнопку Cloud Shell на панели инструментов.
Cloud Shell отображается в нижней части браузера. Убедитесь, что Bash выбран в качестве среды в раскрывающемся меню. Вы можете развернуть окно Cloud Shell, чтобы предоставить себе больше места.
Совет
Чтобы вставить в Cloud Shell, нажмите клавиши CTRL+SHIFT+V или щелкните правой кнопкой мыши и выберите команду "Вставить " в контекстном меню.
Создание и развертывание веб-приложения
В Cloud Shell клонируйте вилированный репозиторий в Azure с помощью следующей команды, заменив
<your-forked-repository-url>URL-адрес вилированного репозитория.git clone <your-forked-repository-url>Измените каталог на папку клонированного репозитория.
cd python-sample-vscode-flask-tutorialВыполните команду az webapp up , чтобы подготовить веб-приложение службы приложений и выполнить первое развертывание.
--name <your-web-app-name>Используйте параметр, чтобы назначить уникальное имя в Azure, например личное или корпоративное имя, а также--name <your-name>-flaskpipelinesидентификатор приложения. Выполнениеaz webapp upбез параметров назначает случайно созданное имя веб-приложения, уникальное в Azure.az webapp up --name <your-web-app-name>
Команда az webapp up распознает приложение как приложение Python и выполняет следующие действия:
- Создает группу ресурсов по умолчанию.
- Создает план службы приложений по умолчанию.
-
Создает веб-приложение с назначенным именем. Это приложение
URL<your-web-app-name>.azurewebsites.net. - Развертывает все файлы из текущего рабочего каталога в ZIP-архив с включенной автоматизацией сборки.
- Кэширует параметры локально в файле .azure/config , чтобы их не нужно указывать повторно при развертывании из папки проекта с
az webapp upдругимиaz webappкомандами. Команды автоматически используют кэшированные значения по умолчанию.
Действия по умолчанию можно переопределить собственными значениями с помощью параметров команды. Дополнительные сведения см. в az webapp up.
Команда az webapp up создает следующие выходные данные JSON для примера веб-приложения:
{
"URL": <your-web-app-url>,
"appserviceplan": <your-app-service-plan-name>,
"location": <your-azure-region>,
"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Запишите значения resourcegroupи runtime_version значения, которые будут использоваться далее в этом руководстве.
Настройка команды запуска
В приложении python-sample-vscode-flask-tutorial есть файл startup.txt , содержащий определенную команду запуска для веб-приложения. Задайте для свойства startup-file конфигурации веб-приложения startup.txt значение, введя следующую команду, используя имена групп ресурсов и веб-приложений.
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
Чтобы использовать Azure Pipelines для развертывания в веб-приложении Службы приложений Azure, необходимо подключить проект Azure DevOps к ресурсам Azure.
Создание субъекта-службы
Субъект-служба — это удостоверение, созданное для приложений, размещенных служб и автоматизированных средств для доступа к ресурсам Azure. Этот доступ ограничен ролями, назначенными субъекту-службе, что позволяет контролировать доступ к ресурсам на каком уровне.
Чтобы создать субъект-службу, выполните следующую команду в Bash Cloud Shell. Замените <service-principal-name> именем субъекта-службы, <your-subscription-id> идентификатором подписки Azure и <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:
{
"appId": "<client GUID>",
"displayName": "<service-principal-name">,
"password": "<password-string>",
"tenant": "<tenant GUID>"
...
}
Запишите appIdзначения passwordи tenantId значения, используемые для создания подключения к службе в следующем разделе.
Соединение с сервисом
Подключение службы обеспечивает прошедший проверку подлинности доступ из Azure Pipelines к внешним и удаленным службам. Чтобы развернуть веб-приложение Службы приложений Azure, создайте подключение службы к группе ресурсов для веб-приложения.
На странице проекта Azure DevOps выберите параметры проекта.
В разделе "Параметры проекта" выберитеподключения службы>.
На странице "Подключения службы" выберите "Создать подключение службы " или "Создать подключение службы", если это подключение службы является первым в проекте.
На экране "Создать подключение службы " выберите Azure Resource Manager и нажмите кнопку "Далее".
На экране подключения к службе Azure выберите тип удостоверения. В этом примере используется регистрация приложений (автоматическая), которая рекомендуется. Дополнительные сведения о методах проверки подлинности см. в статье "Подключение к Azure" с помощью подключения службы Azure Resource Manager.
Для учетных данных выберите федерацию удостоверений рабочей нагрузки (автоматически).
Заполните следующие поля:
- Уровень области: выберите подписку.
- Подписка. Выберите подписку Azure.
- Группа ресурсов: выберите группу ресурсов, содержащую веб-приложение.
- Имя подключения службы: введите описательное имя подключения.
- Предоставьте разрешения доступа всем конвейерам: установите этот флажок, чтобы предоставить доступ ко всем конвейерам в проекте.
Выберите Сохранить.
На странице проекта Azure DevOps выберите параметры проекта.
В разделе "Параметры проекта" выберитеподключения службы>.
На странице "Подключения службы" выберите "Создать подключение службы " или "Создать подключение службы", если это подключение службы является первым в проекте.
На экране "Создать подключение службы " выберите Azure Resource Manager и нажмите кнопку "Далее".
Выберите субъект-службу (вручную) и нажмите кнопку "Далее".
На экране подключения к службе Azure заполните следующие поля:
- Среда: выбор облака Azure.
- Уровень области: выберите подписку.
- Идентификатор подписки. Введите идентификатор подписки Azure.
- Имя подписки. Введите имя подписки Azure.
В разделе "Проверка подлинности" выполните следующие поля:
-
Идентификатор субъекта-службы: введите
appIdзначение, возвращаемое командойaz ad sp create-for-rbac. - Учетные данные: выберите ключ субъекта-службы.
-
Ключ субъекта-службы: введите
passwordзначение, возвращаемое командойaz ad sp create-for-rbac. -
Идентификатор клиента: введите
tenantзначение, возвращаемое командойaz ad sp create-for-rbac. - Нажмите кнопку "Проверить" , чтобы проверить подключение.
-
Идентификатор субъекта-службы: введите
В разделе "Сведения" в разделе "Имя подключения службы" введите имя подключения к службе.
Установите флажок для предоставления разрешений на доступ ко всем конвейерам.
Выберите " Проверить и сохранить".
Новое подключение отображается в списке подключений службы и готово к использованию в конвейере.
Создание конвейера
Создайте конвейер для создания и развертывания веб-приложения Python в службе приложение Azure.
В меню навигации слева для проекта выберите "Конвейеры".
На странице "Конвейеры" выберите "Создать конвейер" или "Создать конвейер ", если этот конвейер является первым в проекте.
На экране " Где находится код " выберите GitHub. Возможно, вам будет предложено войти в GitHub.
На экране "Выбор репозитория" выберите форк вашего образца репозитория. GitHub может снова ввести пароль GitHub или установить приложение Azure Pipelines GitHub. Следуйте инструкциям на экране, чтобы установить приложение. Дополнительные сведения см. в разделе проверки подлинности приложения GitHub.
На странице "Настройка конвейера " выберите Python для веб-приложения Linux в Azure.
На следующем экране выберите подписку Azure и нажмите кнопку "Продолжить".
На следующем экране выберите веб-приложение Azure и выберите "Проверить и настроить".
Azure Pipelines создает файл azure-pipelines.yml и отображает его в редакторе конвейера YAML.
В меню навигации слева для проекта выберите "Конвейеры".
На странице "Конвейеры" выберите "Создать конвейер" или "Создать конвейер ", если этот конвейер является первым в проекте.
На странице "Где находится кодовая страница", выберите GitHub Enterprise Server. Возможно, вам будет предложено войти в GitHub.
На вкладке "Выбор репозитория " выберите вилку репозитория. GitHub может предложить вам снова ввести пароль GitHub или установить расширение или приложение Azure Pipelines GitHub. Следуйте инструкциям на экране, чтобы установить приложение. Дополнительные сведения см. в разделе Доступ к репозиториям GitHub.
На странице "Настройка конвейера " выберите "Начальный конвейер".
На странице проверки конвейера YAML замените содержимое начального azure-pipelines.yml файла следующим файлом конвейера YAML. В ФАЙЛЕ YAML:
Замените
<your-service-connection-name><your-web-app-name>заполнители собственными значениями.Замените
<your-pool-name>именем пула агентов, который вы хотите использовать, и замените<your-python-version>версию Python, запущенную в агенте. Эта версия должна соответствовать выходнымruntime_versionданнымaz webapp upJSON команды.
Файл конвейера YAML
На странице проверки конвейера YAML просмотрите конвейер, чтобы узнать, что это делает. Убедитесь, что все входные данные по умолчанию подходят для кода. Дополнительные сведения о схеме файла YAML конвейера см. в справочнике по схеме YAML.
Следующий полный пример файла конвейера YAML определяет конвейер CI/CD в виде ряда этапов, заданий и шагов, где каждый шаг содержит сведения о различных задачах и сценариях. Созданный код 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 setuptools
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
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'
Переменные
Раздел variables в начале ФАЙЛА YAML определяет следующие переменные:
| Переменная | Описание |
|---|---|
azureServiceConnectionId |
Идентификатор подключения службы Azure Resource Manager. |
webAppName |
Имя веб-приложения службы приложений. |
vmImageName |
Имя операционной системы, используемой для агента сборки. |
environmentName |
Имя среды для развертывания, в которой автоматически создается при выполнении задания развертывания. |
projectRoot |
Корневая папка, содержащая код приложения. |
pythonVersion |
Версия Python, используемая в агентах сборки и развертывания. |
| Переменная | Описание |
|---|---|
azureServiceConnectionId |
Идентификатор подключения службы Azure Resource Manager. |
webAppName |
Имя веб-приложения службы приложений. |
environmentName |
Имя среды для развертывания, в которой автоматически создается при выполнении задания развертывания. |
projectRoot |
Папка, содержащая код приложения. Это значение является автоматической системной переменной. |
pythonVersion |
Версия Python, используемая в агентах сборки и развертывания. |
Этапы сборки и развертывания
Конвейер состоит из этапов сборки и развертывания.
Этап сборки
Этап сборки содержит одно задание, которое выполняется в операционной системе, определенной в переменной vmImageName , в данном случае ubuntu-latest.
- job: BuildJob
pool:
vmImage: $(vmImageName)
Этап сборки содержит одно задание, которое выполняется на агенте pool в определяемом параметром name .
Вы можете указать возможности агента с помощью ключевого 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 setuptools pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"Задача ArchiveFiles создает ZIP-архив, содержащий созданное веб-приложение.
- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: trueПараметры задаются следующим образом:
Параметр Описание rootFolderOrFileРасположение кода приложения. includeRootFolderСледует ли включить корневую папку в файл .zip . Задайте значение false. Если задано значениеtrue, содержимое файла.zip помещаются в папку с именем s , а задача не может найти код приложения.archiveTypeТип создаваемого архива. Задайте значение zip.archiveFileРасположение создаваемого файла .zip . replaceExistingArchiveУказывает, следует ли заменить существующий архив, если файл уже существует. Задайте значение true.Затем
.zipфайл отправляется в конвейер в виде артефакта с именемdrop. Этап развертывания использует файл.zip для развертывания приложения.- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop- Параметр
uploadзадает расположение и имя файла .zip для отправки. - Параметр
artifactзадает имя созданного артефактаdrop.
- Параметр
Этап развертывания
Этап развертывания выполняется, если этап сборки успешно завершается.
dependsOn Ключевые condition слова определяют это поведение.
dependsOn: Build
condition: succeeded()
Этап развертывания содержит одно задание развертывания, настроенное следующим образом.
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Ключевое
deploymentслово указывает, что задание является заданием развертывания , предназначенным для среды для развертывания. Автоматическиenvironmentсоздается в проекте при запуске задания.Параметр
poolуказывает пул агентов развертывания и использует пул агентов по умолчанию, еслиnameон не указан. Агент выполняется в операционной системе, определенной в переменнойvmImageName, в данном случаеubuntu-latest.
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Ключевое
deploymentслово указывает, что задание является заданием развертывания , предназначенным для среды для развертывания. Автоматическиenvironmentсоздается в проекте при запуске задания.Параметр
poolуказывает пул агентов развертывания и должен содержать агент с возможностью запуска версии Python, указанной в конвейере.
Ключевое strategy слово определяет стратегию развертывания.
strategy:
runOnce:
deploy:
steps:
- Ключевое
runOnceслово указывает, что задание развертывания выполняется один раз. - Ключевое
deployслово указываетstepsвыполнение в задании развертывания.
На steps этом этапе выполняются следующие задачи:
- UsePythonVersion@0 выбирает версию Python, используемую так же, как и на этапе сборки.
-
AzureWebApp@1 развертывает веб-приложение и
dropZIP-артефакт.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : <your-web-app-name>'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
- Параметр
azureSubscriptionсодержит указанныйazureServiceConnectionIdв переменных конвейера. - Содержит
appNameзначение переменнойwebAppName. - Указывает
packageимя и расположение файла.zip для развертывания.
Кроме того, так как репозиторий python-vscode-flask-tutorial содержит команду запуска приложения в файле с именем startup.txt, можно указать команду запуска приложения, добавив параметр: startUpCommand: 'startup.txt'
Запуск конвейера
Теперь вы готовы попробовать конвейер.
В редакторе конвейера выберите "Сохранить и запустить".
На экране "Сохранить и запустить " добавьте сообщение фиксации, если нужно, а затем нажмите кнопку "Сохранить и запустить".
Вы можете наблюдать за выполнением конвейера, выбрав этапы или задания на странице сводки конвейера. Каждое задание и этап отображают зеленый флажок по мере успешного завершения. Если возникают ошибки, они отображаются в сводке или в шагах задания.
Вы можете быстро вернуться к редактору YAML, выбрав вертикальные точки в правом верхнем углу на странице "Сводка " и выбрав "Изменить конвейер".
В задании развертывания выберите задачу «Развернуть веб-приложение Azure», чтобы отобразить результаты.
В выходных данных выберите URL-адрес после URL-адреса приложения службы приложений. Приложение должно отображаться следующим образом:
Примечание.
Если развертывание приложения завершается сбоем из-за отсутствующих зависимостей, requirements.txt файл не был обработан во время развертывания. Эта проблема может возникнуть, если вы создаете веб-приложение непосредственно на портале, а не с помощью az webapp up команды.
Команда az webapp up задает действие сборки SCM_DO_BUILD_DURING_DEPLOYMENT на true. Если вы подготавливаете службу приложений через портал, это действие не устанавливается автоматически.
Чтобы задать это действие, выполните указанные ниже действия.
- На странице портала веб-приложения выберите "Конфигурация " в меню навигации слева.
- На вкладке "Параметры приложения" выберите "Создать приложение".
- В появившемся всплывающем окне установите Имя в
SCM_DO_BUILD_DURING_DEPLOYMENT, установите Значение вtrue, и нажмите кнопку OK. - Нажмите кнопку Сохранить в верхней части страницы Конфигурация.
- Повторный запуск конвейера. Теперь зависимости должны устанавливаться во время развертывания.
Запуск выполнения конвейера
Этот конвейер выполняется всякий раз, когда выполняется проверка изменений в репозитории кода. Чтобы активировать запуск конвейера, зафиксируйте изменение в репозитории. Например, можно добавить новую функцию в приложение или обновить зависимости приложения.
- Перейдите в репозиторий GitHub для приложения.
- Внесите изменения в код, например изменение названия приложения.
- Зафиксируйте изменения.
- Перейдите к конвейеру и убедитесь, что создается новый запуск и выполняется.
- По завершении выполнения убедитесь, что изменение развернуто в веб-приложении.
- На портале Azure перейдите к веб-приложению и выберите Центр развертывания в меню навигации слева.
- Перейдите на вкладку "Журналы" и убедитесь, что новое развертывание отображается.
Развертывание приложений Django в службе приложений
Azure Pipelines можно использовать для развертывания приложений Django в Службе приложений в Linux, если вы используете отдельную базу данных. Невозможно использовать базу данных SQLite, так как Служба приложений блокирует файл db.sqlite3, предотвращая операции чтения и записи. Это поведение не влияет на внешние базы данных.
Как описано в процессе запуска контейнера, служба приложений автоматически ищет файл 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 для публикации результатов теста в конвейере. Дополнительные сведения см. в разделе "Выполнение тестов".
Очистка ресурсов
Если вы закончите работу с ресурсами Azure, созданными в этом руководстве, удалите их, чтобы избежать дополнительных расходов.
- Удалите созданный проект Azure DevOps. При удалении проекта удаляется подключение конвейера и службы.
- Удалите группу ресурсов Azure, содержащую службу приложений и план службы приложений. В портал Azure перейдите в группу ресурсов, выберите "Удалить группу ресурсов" и следуйте инструкциям.
- Удалите учетную запись хранения Azure, которая поддерживает файловую систему Cloud Shell. Закройте Cloud Shell, а затем найдите группу ресурсов, которая начинается с cloud-shell-storage-. Выберите "Удалить группу ресурсов" и следуйте инструкциям.