Azure DevOps Services
使用 Azure Pipelines 持续集成和持续交付(CI/CD)生成、部署和测试 PHP 项目。
了解如何创建 PHP 管道、将包含示例项目的管道部署到 Azure 应用服务,以及如何配置环境。
若要了解有关 Azure 应用服务的详细信息,请参阅 在 Azure 应用服务中创建 PHP Web 应用。
先决条件
产品 | 要求 |
---|---|
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 订阅。 |
如果要部署到 Azure 应用服务,则需要创建 Web 应用。
获取代码
如果 GitHub 上已有一个要部署的应用,则可以为该代码创建管道。 但是,如果你是新用户,则可以使用我们的示例代码获得更好的开端。 在这种情况下,请在 GitHub 处分叉以下存储库:
https://github.com/Azure-Samples/basic-php-composer
创建管道
登录到你的 Azure DevOps 组织,并转到你的项目。
转到管道,然后选择“ 新建管道”。
选择源位置(GitHub、Azure Repos Git、Bitbucket Cloud 或其他 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 和 Composer。 应用文件将存档并上传到名为 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-22.04'
# 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 预安装在 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-22.04'
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'