Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services
В этой статье показано, как создать конвейер в Azure Pipelines, который создает веб-приложение PHP и развертывает его в Службе приложений Azure. Служба приложений — это служба на основе HTTP для размещения веб-приложений, REST API и мобильных серверных частей. Конвейер использует непрерывную интеграцию из источника GitHub и непрерывной доставки в Службу приложений для автоматического создания, тестирования и развертывания приложений PHP.
Azure Pipelines создает проекты PHP без необходимости настраивать любую инфраструктуру. PHP предварительно установлен в агентах, размещенных в Майкрософт, а также во многих распространенных библиотеках для версий PHP. Для выполнения сборок можно использовать агенты Linux, macOS или Windows. Дополнительные сведения о предварительно установленных версиях PHP см. в разделе Software.
Предпосылки
Свой форк образца проекта PHP на GitHub по адресу https://github.com/Azure-Samples/php-docs-hello-world.
Подсказка
В примере проекта используются параметры часового пояса PHP по умолчанию, которые по умолчанию используются в формате UTC для агентов, размещенных корпорацией Майкрософт. Если приложению требуется определенный часовой пояс, обратитесь к разделу "Настройка часового пояса PHP".
Веб-приложение PHP, созданное для проекта в Службе приложений Azure. Чтобы быстро создать веб-приложение PHP, см. статью "Создание веб-приложения PHP в службе приложений Azure". Вы также можете использовать собственный проект PHP GitHub и веб-приложение.
Вам также требуются следующие предварительные требования:
| Продукт | Требования |
|---|---|
| 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 |
Пример конвейера
В следующем примере файл azure-pipelines.yml, основанный на шаблоне конвейера для PHP как веб-приложения Linux в Azure, имеет две стадии: Build и Deploy. Этап Build устанавливает PHP 8.2, а затем выполняет задачи для архивации файлов проекта и публикации артефакта сборки ZIP в пакет с именем drop.
Этап Deploy выполняется, если этап Build завершается успешно. Он развертывает пакет в службе приложений drop с помощью задачи Azure Web App. При использовании шаблона PHP как веб-приложения Linux на Azure для создания конвейера, сгенерированный конвейер задает и использует переменные и другие значения на основе ваших настроек конфигурации.
Замечание
Если вы создаете конвейер из PHP в качестве веб-приложения Linux в шаблоне Azure, а приложение PHP не использует Composer, удалите следующие строки из созданного конвейера перед сохранением и запуском. Конвейер шаблона завершается ошибкой, если composer.json отсутствует в репозитории.
- script: composer install --no-interaction --prefer-dist
workingDirectory: $(rootFolder)
displayName: 'Composer install'
trigger:
- main
variables:
# Azure Resource Manager service connection
azureSubscription: 'service-connection-based-on-subscription-id'
# Web app name
webAppName: 'my-php-web-app'
# Agent VM image name
vmImageName: 'ubuntu-22.04'
# Environment name
environmentName: 'my-php-web-app-environment'
# Root folder where your composer.json file is available.
rootFolder: $(System.DefaultWorkingDirectory)
stages:
- stage: Build
displayName: Build stage
variables:
phpVersion: '8.2'
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- script: |
sudo update-alternatives --set php /usr/bin/php$(phpVersion)
sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)
sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)
sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)
sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
php -version
workingDirectory: $(rootFolder)
displayName: 'Use PHP version $(phpVersion)'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(rootFolder)'
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: AzureWebApp@1
displayName: 'Deploy Azure Web App'
inputs:
azureSubscription: $(azureSubscription)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Создание конвейера YAML
Чтобы создать и запустить пример конвейера, выполните следующие действия.
В проекте Azure DevOps выберите Pipelines в меню навигации слева, а затем выберите "Создать конвейер " или "Создать конвейер ", если этот конвейер является первым в проекте.
На странице "Где находится кодовая страница", выберите GitHub.
На странице Выбор репозитория выберите форк репозитория php-docs-hello-world.
Azure Pipelines распознает код как приложение PHP и предлагает несколько шаблоновконвейеров на странице "Настройка конвейера ". В этом примере выберите PHP в качестве веб-приложения Linux в Azure.
На следующем экране выберите подписку Azure и нажмите кнопку "Продолжить". Это действие создает подключение службы к ресурсам Azure.
На следующем экране выберите веб-приложение Azure и выберите "Проверить и настроить". Azure Pipelines создает файл azure-pipelines.yml и отображает его в редакторе конвейера YAML.
На экране проверки вашего конвейера YAML просмотрите код вашего конвейера. Когда будете готовы, выберите Сохранить и запустить.
На следующем экране нажмите кнопку "Сохранить и снова запустить ", чтобы зафиксировать новый файл azure-pipelines.yml в репозиторий и запустить сборку CI/CD.
Замечание
При первом запуске конвейера запрашивается разрешение на доступ к среде, которая она создает. Выберите "Разрешить, чтобы предоставить конвейеру доступ к среде".
Чтобы просмотреть конвейер в действии, выберите выполняемое задание на странице запуска Сводка. По завершении выполнения выберите ссылку URL-адреса приложения службы приложений на шаге "Развертывание веб-приложения Azure ", чтобы просмотреть развернутое веб-приложение.
Убедитесь, что развертывание выполнено успешно, перейдя по URL-адресу. Вы увидите выходные данные примера приложения Hello World!
Настройка конвейера
Вы можете изменить конвейер, выбрав значок «Дополнительные действия» в правом верхнем углу страницы «Сводка запуска» и затем выбрав «Изменить конвейер». Также это можно сделать, выбрав «Изменить» в правом верхнем углу на странице самого конвейера. Каждое изменение, которое вы фиксируете в репозитории, запускает новый процесс работы конвейера CI/CD.
Конвейер можно настроить несколькими способами:
Использование определенной версии PHP
Агенты Ubuntu, размещенные корпорацией Майкрософт, имеют установлено несколько версий PHP. Символьная ссылка на /usr/bin/php указывает на текущую версию PHP, поэтому при запуске phpвыполняется заданная версия.
Чтобы использовать версию PHP, отличной от используемой по умолчанию, укажите ссылку на нужную версию с помощью update-alternatives команды. В конвейере YAML измените значение переменной phpVersion на нужную версию. Добавьте следующий фрагмент кода в variablessteps разделы этапа сборки:
variables:
phpVersion: 8.3
steps:
- script: |
sudo update-alternatives --set php /usr/bin/php$(phpVersion)
sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)
sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)
sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)
sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
php -version
displayName: 'Use PHP version $(phpVersion)'
Установка часового пояса PHP
Агенты, размещенные корпорацией Майкрософт, по умолчанию используются в формате UTC, поэтому функции PHP, такие как date() и strtotime() возвращают значения UTC. Чтобы использовать другой часовой пояс в скриптах конвейера, задайте TZ переменную среды или вызов date_default_timezone_set() в коде PHP.
В следующем примере для шага скрипта задается часовой пояс для восточного времени. Добавьте этот фрагмент steps в раздел задания сборки:
- script: |
export TZ='America/New_York'
php -r "date_default_timezone_set('America/New_York'); echo date('Y-m-d H:i:s T');"
displayName: 'Run PHP with Eastern time zone'
Список поддерживаемых идентификаторов часового пояса см. в списке поддерживаемых часовых поясов PHP.
Установка зависимостей
Чтобы использовать Composer для установки зависимостей, добавьте следующий фрагмент кода в steps раздел задания сборки:
- script: composer install --no-interaction --prefer-dist
displayName: 'composer install'
Если файлcomposer.json отсутствует в корневом каталоге, используйте --working-dir аргумент, чтобы указать, какой каталог следует использовать. Например, если composer.json находится в вложенных папках /pkgs, используйте composer install --no-interaction --working-dir=pkgs. Можно также указать абсолютный путь с помощью встроенной системной переменной: --working-dir='$(System.DefaultWorkingDirectory)/pkgs'
Тестирование с помощью PHPUnit
Чтобы запустить тесты с помощью PHPUnit, сначала установите его в качестве зависимости разработки с помощью Composer, а затем запустите его. Добавьте следующий фрагмент кода в steps раздел задания сборки:
- script: composer require --dev phpunit/phpunit
displayName: 'Install PHPUnit'
- script: vendor/bin/phpunit --log-junit $(Build.StagingDirectory)/test-results.xml
displayName: 'Run tests with PHPUnit'
Сохранение артефактов PHP с записью сборки
Чтобы сохранить артефакты сборки с записью сборки, включите задачу "Архивные файлы " в конвейер и при необходимости настройте значение rootFolderOrFile для изменения того, что включает архив.
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
Устранение неполадок
Ошибки подключения службы
Если конвейер завершается ошибкой авторизации во время развертывания, убедитесь, что подключение службы Azure Resource Manager настроено правильно и имеет необходимые разрешения для развертывания в службе приложений.
Сбои установки Composer
При composer install сбое убедитесь, что файл composer.json присутствует в рабочем каталоге. Если файл находится в подкаталоге --working-dir , используйте аргумент. Если composer.json не существует в репозитории, удалите шаг Composer из конвейера.
Версия PHP недоступна
Если update-alternatives завершится с ошибкой, такой как no alternatives for php8.x, запрошенная версия PHP не установлена на образе агента. Проверьте список программного обеспечения агента, размещенного корпорацией Майкрософт , для доступных версий PHP.
Разрешение на развертывание запрещено
Если этап развертывания завершается неудачно из-за ошибки прав доступа, проверьте, что:
- Ваше подключение к службе имеет роль Участника в ресурсе службы приложений.
- Конвейер имеет разрешение на доступ к среде. В первом запуске нажмите кнопку "Разрешить " при появлении запроса.