生成和测试 PHP 应用

Azure DevOps Services

使用 Azure Pipelines 持续集成和持续交付 (CI/CD) 来生成、部署和测试 PHP 项目。

了解如何创建 PHP 管道、如何使用示例项目将管道部署到 Azure 应用服务,以及如何配置环境。

若要了解有关 Azure 应用服务的详细信息,请参阅在 Azure 应用服务中创建 PHP Web 应用

先决条件

确保具有以下内容:

  • GitHub 帐户,可在其中创建存储库。 免费创建一个

  • Azure DevOps 组织。 免费创建一个。 如果你的团队已创建帐户,请确保你是要使用的 Azure DevOps 项目的管理员。

  • 能够在 Microsoft 托管的代理上运行管道。 若要使用 Microsoft 托管代理,Azure DevOps 组织必须有权访问 Microsoft 托管并行作业。 可以购买并行作业,也可以请求免费授予

  • 一个 Azure 帐户。 如果没有帐户,可以免费创建一个帐户

    提示

    如果你是新手,最简单的入门方法是使用与 Azure Pipelines 组织和 Azure 订阅的所有者相同的电子邮件地址。

  • 如果要部署到 Azure 应用程序服务,则需要创建 Web 应用。

获取代码

如果 GitHub 中已有要部署的应用,则可以尝试为该代码创建管道。 但是,如果你是新用户,则可以使用我们的示例代码来获得更好的入门体验。 在这种情况下,请在 GitHub 中为以下存储库创建分支:

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

创建管道

  1. 登录到你的 Azure DevOps 组织,并转到你的项目。

  2. 转到“管道”,然后选择新建管道

  3. 选择源位置(GitHub、Azure Repos Git、Bitbucket 云或其他 Git 存储库)。

  4. 选择代码所在的存储库。

  5. 在“配置”选项卡中选择“PHP”。

  6. 确保 PHP 版本为 8.3。

  7. 检查新管道。 准备就绪后,选择“保存并运行”。

    新 YAML 管道中的“保存并运行”按钮

  8. 系统会提示你将新的 azure-pipelines.yml 文件提交到存储库。 再次选择“保存并运行” 。

    如果要观察管道的运行情况,请选择生成作业。

    现在,存储库中有一个可用的 YAML 管道 (azure-pipelines.yml),可供你自定义!

如果要更改管道,请在“管道”页面上选择你的管道,然后选择“编辑”来编辑 azure-pipelines.yml 文件。

进一步阅读以了解一些更常见的自定义管道的方法。

部署到应用服务

使用管道生成 PHP Web 应用并部署到 Azure 应用服务。 Azure 应用服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端 。

可以使用任务来存档文件、发布生成工件,然后使用 Azure Web 应用任务部署到 Azure 应用服务。

此管道有两个阶段:内部版本和部署。 在内部版本阶段,PHP 8.3 与编辑器一起安装。 应用文件将存档并上传到名为 drop 的包中。 在“部署”阶段,drop 包作为 Web 应用部署到 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-latest'
  # 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 与每个 PHP 版本的许多通用库一起预安装在 Microsoft 托管代理上。 可以使用 Linux、macOS 或 Windows 代理来运行你的生成。 有关详细信息以及预安装的 PHP 的确切版本,请参阅 Microsoft 托管代理

在 Microsoft 托管的 Ubuntu 代理上,安装了多个版本的 PHP。 /usr/bin/php 处的符号链接指向当前设置的 PHP 版本,因此当你运行 php 时,将执行设置的版本。

若要使用默认版本以外的 PHP 版本,可以使用 update-alternatives 工具将符号链接指向该版本。 通过将以下代码片段添加到 azure-pipelines.yml 文件来设置所需的 PHP 版本,然后更改 phpVersion 变量的值。

pool:
  vmImage: 'ubuntu-latest'

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.json 位于子文件夹 pkgs

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

还可以使用内置系统变量指定绝对路径:

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