生成和测试 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
创建管道
登录到你的 Azure DevOps 组织,并转到你的项目。
转到“管道”,然后选择新建管道。
选择源位置(GitHub、Azure Repos Git、Bitbucket 云或其他 Git 存储库)。
选择代码所在的存储库。
在“配置”选项卡中选择“PHP”。
确保 PHP 版本为 8.3。
检查新管道。 准备就绪后,选择“保存并运行”。
系统会提示你将新的 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'