生成和测试 PHP 应用

Azure DevOps Services

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

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

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

先决条件

确保具有以下内容:

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

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

  • 能够在 Microsoft 托管的代理上运行管道。 可以购买并行作业,也可以请求免费层。

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

    提示

    如果不熟悉此功能,最简单的入门方法是使用与Azure Pipelines组织和 Azure 订阅所有者相同的电子邮件地址。

获取代码

如果已在要部署的GitHub应用,则可以为该代码创建管道。 但是,如果你是新用户,则可以使用我们的示例代码获得更好的开端。 在这种情况下,GitHub处分叉以下存储库:

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

创建管道

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

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

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

    Save and run button in a new YAML pipeline

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

    如果要监视管道的操作,请选择生成作业。

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

若要更改管道,请在Pipelines页上选择管道,然后编辑azure-pipelines.yml 文件。

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

部署到应用服务

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

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

此管道有两个阶段:生成和部署。 在生成阶段,PHP 7.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: '7.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 的确切版本,请参阅 Microsoft 托管的代理

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

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

pool:
  vmImage: 'ubuntu-latest'

variables:
  phpVersion: 7.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'