共用方式為


建置及測試 PHP 應用程式

Azure DevOps Services

使用 Azure Pipelines 持續整合和持續傳遞 (CI/CD) 來建置、部署及測試您的 PHP 專案。

瞭解如何建立 PHP 管線、將具有範例專案的管線部署到 Azure App Service,以及如何設定環境。

若要深入瞭解 Azure App Service,請參閱 在 Azure App Service 中建立 PHP Web 應用程式

先決條件

請確定您有下列物品:

  • 您可以用來建立存放庫的 GitHub 帳戶。 免費建立一個

  • Azure DevOps 組織。 免費建立一個。 如果您的小組已有專案,請確認您是要使用的 Azure DevOps 專案的管理員。

  • 能夠在由 Microsoft 託管的代理程式上執行流水線。 若要使用Microsoft裝載的代理程式,您的 Azure DevOps 組織必須能夠存取Microsoft裝載的平行作業。 您可以購買 平行作業,也可以 申請免費補助

  • Azure 帳戶。 如果您沒有,可以免費建立一個

    小提示

    如果您是新手,最簡單的開始使用方式是使用與 Azure Pipelines 組織和 Azure 訂用帳戶擁有者相同的電子郵件位址。

  • 如果您要部署至 Azure App Service,您必須建立 Webapp。

取得程式碼

如果您已經有想要部署的 GitHub 應用程式,您可以建立該程式代碼的管線。 但是,如果您是新使用者,您可以使用我們的範例程式代碼來取得更好的開端。 在此情況下,請在 GitHub 派生下列存放庫:

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

建立管線

  1. 登入您的 Azure DevOps 組織並前往您的專案。

  2. 前往管線,然後選擇 新增管線

  3. 選取您的來源位置(GitHub、Azure Repos Git、Bitbucket Cloud 或其他 Git 存放庫)。

  4. 選取程式代碼所在的存放庫。

  5. 在 [設定] 索引標籤中,選取 [PHP]。

  6. 確定 PHP 版本為 8.3。

  7. 檢查新的管線。 當您準備好時,請選取 [儲存並執行]

    在新的 YAML 管線中儲存並執行按鈕

  8. 系統會提示您將新的 azure-pipelines.yml 檔案提交至版本庫。 選取 儲存,然後再次執行

    如果您想要監看管線的運作情形,請選取建置作業。

    您現在已在存放庫中有一個可運作的 YAML 管線 (azure-pipelines.yml),可供您自定義!

當您想要對管線進行變更時,請在 [管線] 頁面上選取您的管線,接著 編輯azure-pipelines.yml 檔案。

進一步瞭解如何更常見地自定義您的管線。

部署至 App Service

使用管線建置 PHP Web 應用程式並部署至 Azure App Service。 Azure App Service 是 HTTP 型服務,用來裝載 Web 應用程式、REST API 和行動後端。

您可以使用任務來歸檔檔案、發佈建置成品,然後使用 Azure Web 應用程式任務 部署至 Azure App Service。

此管線有兩個階段:建置和部署。 在建置階段中,會使用 Composer 安裝 PHP 8.3。 應用程式檔案會封存並上傳至名為 drop的套件。 在部署階段期間,drop 套件會部署至 Azure App Service 作為 Web 應用程式。


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-20.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 版本。

若要使用預設以外的 PHP 版本,符號連結可以使用 update-alternatives 工具指向該版本。 將下列代碼段新增至 azure-pipelines.yml 檔案,並變更 phpVersion 變數的值,以設定您想要的 PHP 版本。

pool:
  vmImage: 'ubuntu-20.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'