生成、测试和部署 PHP 应用

Azure DevOps Services

本文介绍如何在 Azure Pipelines 中创建管道,该管道生成 PHP Web 应用并将其部署到 Azure 应用服务。 应用服务是一种基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。 该管道使用 GitHub 源的持续集成和持续交付到应用服务来自动生成、测试和部署 PHP 应用。

Azure Pipelines 无需设置任何基础结构即可生成 PHP 项目。 PHP 预安装在 Microsoft托管代理上,以及许多用于 PHP 版本的常见库。 可以使用 Linux、macOS 或 Windows 代理来运行生成。 有关预安装哪些 PHP 版本的详细信息,请参阅 软件

先决条件

还需要满足以下先决条件:

产品 要求
Azure DevOps - Azure DevOps 项目
- 能够在 Microsoft 托管的代理上运行管道。 可以购买 并行作业 ,也可以请求免费层。
- 对 YAML 和 Azure Pipelines 的基本知识。 有关详细信息,请参阅 创建第一个管道
- 权限:
     - 若要创建管道:必须位于 “参与者 ”组中,并且该组需要将 “创建生成管道 ”权限设置为“允许”。 项目管理员组的成员可以管理管道。
    - 若要创建服务连接:必须具有服务连接的管理员创建者角色。
GitHub - GitHub 帐户。
- 用于授权 Azure Pipelines 的 GitHub 服务连接
天蓝色 Azure 订阅
产品 要求
Azure DevOps - Azure DevOps 项目
- 自托管代理。 若要创建一个代理,请参阅 自承载代理
- 对 YAML 和 Azure Pipelines 的基本知识。 有关详细信息,请参阅 创建第一个管道
- 权限:
    - 若要创建管道:必须位于 “参与者 ”组中,并且该组需要将 “创建生成管道 ”权限设置为“允许”。 项目管理员组的成员可以管理管道。
    - 若要创建服务连接:必须具有服务连接的管理员创建者角色。
GitHub - GitHub 帐户。
- 用于授权 Azure Pipelines 的 GitHub 服务连接
天蓝色 Azure 订阅

注释

GitHub 可能需要身份验证、授权或登录到 GitHub 组织或特定存储库。 按照说明完成所需的过程。 有关详细信息,请参阅访问 GitHub 存储库

示例管道

以下示例azure-pipelines.yml文件基于 在 Azure 上作为 Linux Web 应用的 PHP管道模板,有两个阶段,Build。 该 Build 阶段安装 PHP 8.2,然后运行任务来存档项目文件并将 ZIP 生成项目发布到名为 drop的包。

Deploy阶段在Build阶段成功时运行,并使用drop任务将包部署到应用服务。 使用PHP 作为 Azure 上的 Linux Web 应用模板来创建管道时,生成的管道会设置变量并根据您的配置设置使用这些变量和其他值。

注释

如果在 Azure 模板上从 PHP 作为 Linux Web 应用创建管道,并且 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 管道

若要创建并运行示例管道,请执行以下步骤:

  1. 在 Azure DevOps 项目中,从左侧导航菜单中选择 “管道 ”,然后选择“ 新建管道 ”或“ 创建管道 ”(如果此管道是项目中的第一个管道)。

  2. 代码在哪里 页面上,选择 GitHub

  3. “选择存储库 ”页上,选择分支 php-docs-hello-world 存储库。

  4. Azure Pipelines 将代码识别为 PHP 应用,并在“配置管道”页上建议多个管道模板。 对于此示例,请选择 PHP 作为 Azure 上的 Linux Web 应用

  5. 在下一个屏幕上,选择 Azure 订阅,然后选择 “继续”。 此操作将创建到 Azure 资源的服务连接。

  6. 在下一个屏幕上,选择 Azure Web 应用,然后选择 “验证并配置”。 Azure Pipelines 创建一个 azure-pipelines.yml 文件,并将其显示在 YAML 管道编辑器中。

  7. “查看管道 YAML ”屏幕上,查看管道的代码。 准备就绪后,选择“保存并运行”。

    显示新 YAML 管道中的“保存和运行”按钮的屏幕截图。

  8. 在下一个屏幕上,选择“ 保存并再次运行 ”,将新的 azure-pipelines.yml 文件提交到存储库并启动 CI/CD 生成。

    注释

    首次运行管道时,它会请求权限以访问其创建的环境。 选择 “允许 ”以授予管道访问环境的权限。

  9. 若要监视管道的运行情况,请在“运行 摘要”页面上选择对应作业。 运行完成后,在“部署 Azure Web 应用”步骤中选择“应用服务应用程序 URL”链接以查看已部署的 Web 应用。

自定义管道

可以通过选择运行摘要页右上角的“更多操作”图标,然后选择“编辑管道”或选择管道页面右上角的“编辑”来编辑管道。 每次您向存储库提交的编辑都会触发一个新的 CI/CD 管道运行。

可以通过多种方式自定义管道:

使用特定的 PHP 版本

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

若要使用非默认版本的 PHP,可以使用命令将符号链接指向所需的版本 update-alternatives 。 在 YAML 管道中,将变量的值 phpVersion 更改为所需的版本,并使用以下代码片段:

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

安装依赖项

若要使用 Composer 安装依赖项,请在 azure-pipelines.yml 文件中包括以下代码片段:

- 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 运行测试,请将以下代码片段添加到 azure-pipelines.yml 文件中:

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

通过生成记录保留 PHP 制品

若要将构建产物与构建记录一起保存,请在管道中包含 存档文件 任务,并根据需要自定义 rootFolderOrFile 的值以更改存档内容。

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false