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 にデプロイする場合は、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 ファイルを編集します。
パイプラインをカスタマイズするいくつかの一般的な方法については、以下を参照してください。
App Service にデプロイする
パイプラインを使用して、PHP Web アプリをビルドし、Azure App Service デプロイします。 Azure App Service は、Web アプリケーション、REST API、およびモバイル バックエンドをホストするための HTTP ベースのサービスです。
タスクを使用してファイルをアーカイブし、ビルド成果物を発行した後、Azure Web App タスクを使用して Azure App Service にデプロイできます。
このパイプラインには、ビルドとデプロイの 2 つのステージがあります。 ビルド段階では、PHP 8.3 が Composer とともにインストールされます。 アプリ ファイルはアーカイブされ、drop
という名前のパッケージにアップロードされます。 デプロイ フェーズでは、drop
パッケージが Web アプリとして Azure App Service にデプロイされます。
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 は、PHP バージョンごとの多数の共通ライブラリと共に、Microsoft によってホストされるエージェントにプレインストールされています。 Linux、macOS、または Windows エージェントを使用してビルドを実行できます。 プレインストールされる PHP の詳細と正確なバージョンについては、「Microsoft によってホストされるエージェント」を参照してください。
Microsoft によってホストされる Ubuntu エージェントには、PHP の複数のバージョンがインストールされています。 /usr/bin/php
の symlink は、現在設定されている PHP バージョンを指すため、php
を実行すると、設定されたバージョンが実行されます。
既定以外の PHP バージョンを使用するには、update-alternatives
ツールを使用して symlink がそのバージョンを指すように設定できます。 目的の PHP バージョンを設定するには、次のスニペットを azure-pipelines.yml
ファイルに追加し、phpVersion 変数の値を変更します。
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'