分享方式:


建置及測試 PHP 應用程式

Azure DevOps Services

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

瞭解如何建立 PHP 管線、使用範例專案部署管線以 Azure App 服務,以及如何設定環境。

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

必要條件

請確認您擁有以下項目:

  • 您可以在其中建立存放庫的 GitHub 帳戶。 免費建立一個

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

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

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

    提示

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

  • 如果您要部署至 Azure App 服務,您必須建立 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 服務。 Azure App Service 是 HTTP 型服務,用來裝載 Web 應用程式、REST API 和行動後端。

您可以使用工作來封存盤案、發佈組建成品,然後使用 Azure Web 應用程式工作來部署至 Azure App 服務。

此管線有兩個階段:建置和部署。 在建置階段中,PHP 8.3 會隨撰寫程式一起安裝。 應用程式檔案會封存並上傳至名為的 drop套件。 在部署階段期間,套件drop會部署至 Azure App 服務 作為 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-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 會預安裝在 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: 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'