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


Создание и тестирование приложений PHP

Azure DevOps Services

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

Узнайте, как создать конвейер PHP, развернуть конвейер с примером проекта в Службе приложений Azure и как настроить среду.

Дополнительные сведения о службе приложений Azure см. в статье Создание веб-приложения PHP в службе приложений Azure.

Предпосылки

Убедитесь, что у вас есть указанные ниже компоненты.

  • Учетная запись GitHub, в которой можно создать репозиторий. Создайте ее бесплатно.

  • Организация Azure DevOps. Создайте ее бесплатно. Если у вашей команды уже есть проект Azure DevOps, убедитесь, что вы являетесь администратором проекта, который вы хотите использовать.

  • Возможность запуска конвейерных процессов на агентах, размещенных Майкрософт. Чтобы использовать агенты, размещенные Корпорацией Майкрософт, ваша организация Azure DevOps должна иметь доступ к размещенным в Майкрософт параллельным заданиям. Вы можете приобрести параллельную задачу или запросить бесплатный грант.

  • Учетная запись Azure. Если у вас нет учетной записи, вы можете создать ее бесплатно.

    Подсказка

    Если вы не знакомы с этим, самый простой способ приступить к работе — использовать тот же адрес электронной почты, что и владелец организации Azure Pipelines и подписки Azure.

  • Если вы собираетесь развернуть на Azure App Service, вам нужно создать веб-приложение.

Получение кода

Если у вас уже есть приложение на сайте GitHub, которое вы хотите развернуть, можно создать конвейер для этого кода. Но если вы новый пользователь, вы можете лучше начать с использования нашего примера кода. В этом случае форкните следующий репозиторий на сайте GitHub:

https://github.com/Azure-Samples/basic-php-composer

Создание конвейера

  1. Войдите в свою организацию Azure DevOps и откройте нужный проект.

  2. Перейдите к конвейерам и выберите Создать конвейер.

  3. Выберите исходное расположение (GitHub, Azure Repos Git, Bitbucket Cloud или другие репозитории Git).

  4. Выберите репозиторий, в котором находится код.

  5. Выберите PHP на вкладке Настройка.

  6. Убедитесь, что версия PHP — 8.3.

  7. Проверьте новый конвейер. Когда будете готовы, выберите Сохранить и запустить.

    Кнопка

  8. Вам будет предложено добавить новый файл azure-pipelines.yml в ваш репозиторий. Нажмите кнопку Сохранить и запустить еще раз.

    Если вы хотите посмотреть конвейер в действии, выберите задание сборки.

    Теперь у вас есть рабочий конвейер YAML (azure-pipelines.yml) в репозитории, который готов к настройке!

Если вы хотите произвести изменения в конвейере, выберите его на странице Конвейеры, а затем отредактируйте файл azure-pipelines.yml.

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

Развертывание в службе приложений

Используйте конвейер для создания веб-приложения PHP и развертывания в Службе приложений Azure. Служба приложений Azure — это служба на базе HTTP для размещения веб-приложений, интерфейсов REST API и серверной части мобильных решений.

Вы можете использовать задачи для архивации файлов, публикации артефакта сборки, а затем использовать задачу веб-приложения Azure для развертывания в Службе приложений Azure.

Этот конвейер состоит из двух этапов: сборка и развертывание. На этапе сборки PHP 8.3 устанавливается с Composer. Файлы приложения архивируются и передаются в пакет с именем drop. На этапе развертывания пакет drop развертывается в Службе приложений Azure в качестве веб-приложения.


trigger:
- main

variables:
  # Azure Resource Manager connection created during pipeline creation
  azureSubscription: 'subscription-id'
  # Web app name
  webAppName: 'web-app-name'
  # Agent VM image name
  vmImageName: 'ubuntu-20.04'
  # Environment name
  environmentName: 'environment-name'
  # Root folder under which your composer.json file is available.
  rootFolder: $(System.DefaultWorkingDirectory)

stages:
- stage: Build
  displayName: Build stage
  variables:
    phpVersion: '8.3'
  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)'

    - script: composer install --no-interaction --prefer-dist
      workingDirectory: $(rootFolder)
      displayName: 'Composer install'

    - 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

Настройка среды сборки

Используйте Azure Pipelines для создания проектов PHP без настройки инфраструктуры.

Использование определенной версии PHP

PHP предустановлен на агентах, управляемых Microsoft, вместе со многими стандартными библиотеками для каждой версии PHP. Для выполнения сборок можно использовать агенты Linux, macOS или Windows. Дополнительные сведения и точные версии PHP, которые предварительно установлены, см. в разделе размещенных корпорацией Майкрософт агентов.

В агенте Ubuntu, размещенном корпорацией Майкрософт, устанавливаются несколько версий PHP. Символьная ссылка на /usr/bin/php указывает на текущую заданную версию PHP, так что при запуске phpвыполняется именно эта версия.

Чтобы использовать версию PHP, отличной от используемой по умолчанию, можно указать на нее ссылку с помощью средства update-alternatives. Задайте нужную версию PHP, добавив следующий фрагмент кода в файл azure-pipelines.yml и измените значение переменной phpVersion.

pool:
  vmImage: 'ubuntu-20.04'

variables:
  phpVersion: 8.2

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)'

Установка зависимостей

Чтобы использовать Composer для установки зависимостей, добавьте следующий фрагмент кода в файл azure-pipelines.yml.

- script: composer install --no-interaction --prefer-dist
  displayName: 'composer install'

Тестирование с помощью phpunit

Чтобы выполнить тесты с помощью phpunit, добавьте следующий фрагмент кода в файл azure-pipelines.yml.

- script: ./phpunit
  displayName: 'Run tests with phpunit'

Сохранение приложения PHP с записью сборки

Чтобы сохранить артефакты этой сборки вместе с записью сборки, добавьте следующий фрагмент кода в файл azure-pipelines.yml. При необходимости настройте значение rootFolderOrFile, чтобы изменить то, что входит в архив.

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(system.defaultWorkingDirectory)'
    includeRootFolder: false
- task: PublishBuildArtifacts@1

Использование настраиваемого расположения композитора

Если ваш composer.json находится в подпапке, а не в корневом каталоге, вы можете использовать аргумент --working-dir, чтобы указать Composer, какой каталог использовать. Например, если composer.json находится внутри вложенной папки pkgs

composer install --no-interaction --working-dir=pkgs

Можно также указать абсолютный путь, используя встроенные системные переменные:

composer install --no-interaction --working-dir='$(system.defaultWorkingDirectory)/pkgs'