Azure DevOps 服務
本文說明如何在 Azure Pipelines 中建立管線,以建置 PHP Web 應用程式,並將它部署至 Azure App Service。 App Service 是 HTTP 型服務,用於裝載 Web 應用程式、REST API 和行動後端。 管線會使用從 GitHub 來源持續整合和持續傳遞至 App Service 來自動建置、測試和部署 PHP 應用程式。
Azure Pipelines 會建置您的 PHP 專案,而不需要設定任何基礎結構。 PHP 預先安裝在 Microsoft 裝載的代理程式上,以及許多 PHP 版本的通用程式庫。 您可以使用 Linux、macOS 或 Windows 代理程式來執行組建。 如需預先安裝哪些 PHP 版本的詳細資訊,請參閱 軟體。
先決條件
您自己的範例 GitHub PHP 專案分支位於 https://github.com/Azure-Samples/php-docs-hello-world。
在 Azure App Service 中為專案建立的 PHP Web 應用程式。 若要快速建立 PHP Web 應用程式,請參閱 在 Azure App Service 中建立 PHP Web 應用程式。 您也可以使用自己的PHP GitHub專案和Web應用程式。
您還需要以下先決條件:
| 產品 | 需求 |
|---|---|
| Azure DevOps | - Azure DevOps 專案。 - 能夠在由 Microsoft 託管的代理上運行管線。 您可以購買平行作業,也可以申請免費方案。 - YAML 和 Azure Pipelines 的基本知識。 如需詳細資訊,請參閱 建立您的第一個管線。 - 許可權: - 若要建立管線:您必須位於 參與者 群組中,且群組必須將 [建立組建管線 ] 許可權設定為 [允許]。 Project Administrators 群組的成員可以管理管線。 - 若要建立服務連線:您必須具有 管理員 或 建立者 角色以進行 服務連線。 |
| GitHub的 | - GitHub 帳戶。 - 一個用於授權 Azure Pipelines 的 GitHub 服務連線。 |
| 天藍色 | Azure 訂用帳戶。 |
| 產品 | 需求 |
|---|---|
| Azure DevOps | - Azure DevOps 專案。 - 自託管代理程式。 若要建立一個代理程式,請參閱 自我裝載代理程式。 - YAML 和 Azure Pipelines 的基本知識。 如需詳細資訊,請參閱 建立您的第一個管線。 - 許可權: - 若要建立管線:您必須位於 參與者 群組中,且群組必須將 [建立組建管線 ] 許可權設定為 [允許]。 Project Administrators 群組的成員可以管理管線。 - 若要建立服務連線:您必須具有 管理員 或 建立者 角色以進行 服務連線。 |
| GitHub的 | - GitHub 帳戶。 - 一個用於授權 Azure Pipelines 的 GitHub 服務連線。 |
| 天藍色 | Azure 訂用帳戶。 |
備註
GitHub 可能需要驗證、授權或登入 GitHub 組織或特定存放庫。 請按照指示完成所需的程序。 如需詳細資訊,請參閱 存取 GitHub 存放庫。
範例管線
下列 azure-pipelines.yml 檔案範例是基於 Azure 上的 PHP 做為 Linux Web 應用程式 管線 範本,包含兩個階段,Build 和 Deploy。 此 Build 階段會安裝 PHP 8.2,然後執行工作來封存專案檔案,並將 ZIP 建置成品發佈至名為 drop的套件。
如果Deploy階段成功,Build階段就會執行,並使用 drop 工作將 套件部署至 App Service。 當您使用 PHP 作為 Azure 上的 Linux Web 應用程式 範本來建立管線時,產生的管線會根據您的組態設定來設定和使用變數和其他值。
備註
如果您從Azure 上的 Linux Web 應用程式的 PHP 範本建立管線,且您的 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 管線
若要建立並執行範例管線,請執行下列步驟:
在您的 Azure DevOps 專案中,從左側導覽功能表中選取 [管線] ,然後選取 [ 新增管線 ] 或 [ 建立管線 ] (如果此管線是專案中的第一個管線)。
在 [ 您的程式代碼在哪裡 ] 頁面上,選取 [GitHub]。
在 選取存放庫 頁面上,選取您分支的 php-docs-hello-world 存放庫。
Azure Pipelines 會將程式碼辨識為 PHP 應用程式,並在 [ 設定管線 ] 頁面上建議數個管線範本。 在此範例中,選取 [ PHP 作為 Azure 上的 Linux Web 應用程式]。
在下一個畫面上,選取您的 Azure 訂用帳戶,然後選取 [繼續]。 此動作會建立與您的 Azure 資源的服務連線。
在下一個畫面上,選取您的 Azure Web 應用程式,然後選取 [驗證並設定]。 Azure Pipelines 會建立 azure-pipelines.yml 檔案,並將其顯示在 YAML 管線編輯器中。
在 [ 檢閱管線 YAML ] 畫面上,檢閱管線的程式碼。 當您準備好時,請選取 [儲存並執行]。
在下一個畫面上,選取 [儲存並再次執行] ,將新的 azure-pipelines.yml 檔案認可至存放庫,並啟動 CI/CD 組建。
備註
管線第一次執行時,會要求授權以存取其建立的環境。 選取 [ 允許 ] ,以授與管線存取環境的許可權。
若要觀察管線的運作情況,請在執行 摘要頁面 上選取作業。 執行完成時,請選取 [部署 Azure Web 應用程式] 步驟中的 [App Service 應用程式 URL] 連結,以查看已部署的 Web 應用程式。
自訂管線
您可以選取執行 摘要 頁面右上角的 [更多動作] 圖示,然後選取 [編輯管線],或選取管線頁面右上角的 [編輯],以便編輯管線。 您對儲存庫的每次編輯都會觸發新的 CI/CD 流程運行。
您可以透過數種方式自訂管線:
使用特定的 PHP 版本
多個 PHP 版本安裝在 Microsoft 裝載的 Ubuntu 代理程式上。
/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