生成和测试 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
创建管道
登录到你的 Azure DevOps 组织,并转到你的项目。
在“配置”选项卡中选择 PHP。
检查新管道。 准备就绪后,选择“保存并运行”。

系统会提示将新的 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'