Azure DevOps Services
Azure Pipelines の継続的インテグレーションと継続的デリバリー (CI/CD) を使用して、PHP プロジェクトをビルド、デプロイ、テストします。
PHP パイプラインを作成する方法、サンプル プロジェクトを含むパイプラインを Azure App Service にデプロイする方法、環境を構成する方法について説明します。
Azure App Service の詳細については、Azure App Service での PHP Web アプリの作成に関するページを参照してください。
[前提条件]
製品 | 必要条件 |
---|---|
Azure DevOps | - Azure DevOps プロジェクト。 - Microsoft がホストするエージェントでパイプラインを実行する機能。 並列ジョブを購入することも、Free レベルを要求することもできます。 - YAML と Azure Pipelines に関する基本的な知識。 詳細については、「最初の パイプラインを作成する」を参照してください。 - 権限: - パイプラインを作成するには、 共同作成者 グループに含まれている必要があり、グループには [ ビルド パイプラインの作成 ] アクセス許可が [許可] に設定されている必要があります。 プロジェクト管理者グループのメンバーは、パイプラインを管理できます。 - サービス接続を作成するには、サービス接続の管理者ロールまたは作成者ロールが必要です。 |
GitHub | - GitHub アカウント。 - Azure Pipelines を承認するための GitHub サービス接続 。 |
紺碧 | Azure サブスクリプション。 |
製品 | 必要条件 |
---|---|
Azure DevOps | - Azure DevOps プロジェクト。 - セルフホステッド エージェント。 作成するには、 セルフホステッド エージェントに関するページを参照してください。 - YAML と Azure Pipelines に関する基本的な知識。 詳細については、「最初の パイプラインを作成する」を参照してください。 - 権限: - パイプラインを作成するには、 共同作成者 グループに含まれている必要があり、グループには [ ビルド パイプラインの作成 ] アクセス許可が [許可] に設定されている必要があります。 プロジェクト管理者グループのメンバーは、パイプラインを管理できます。 - サービス接続を作成するには、サービス接続の管理者ロールまたは作成者ロールが必要です。 |
GitHub | - GitHub アカウント。 - Azure Pipelines を承認するための GitHub サービス接続 。 |
紺碧 | 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-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
ファイルに追加して、必要な PHP バージョンを設定し、 phpVersion 変数の値を変更します。
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 に指示できます。 たとえば、composer.json がサブフォルダー内にある場合 pkgs
composer install --no-interaction --working-dir=pkgs
組み込みのシステム変数を使用して、絶対パスを指定することもできます。
composer install --no-interaction --working-dir='$(system.defaultWorkingDirectory)/pkgs'