Azure DevOps Services
この記事では、PHP Web アプリをビルドして Azure App Service にデプロイするパイプラインを Azure Pipelines で作成する方法について説明します。 App Service は、Web アプリケーション、REST API、モバイル バックエンドをホストするための HTTP ベースのサービスです。 このパイプラインでは、GitHub ソースからの継続的インテグレーションと App Service への継続的デリバリーを使用して、PHP アプリを自動的にビルド、テスト、デプロイします。
Azure Pipelines では、インフラストラクチャを設定しなくても PHP プロジェクトがビルドされます。 PHP は、 MICROSOFT がホストするエージェントと、PHP バージョン用の多くの一般的なライブラリにプレインストールされています。 Linux、macOS、または Windows エージェントを使用してビルドを実行できます。 プレインストールされている PHP バージョンの詳細については、「 ソフトウェア」を参照してください。
[前提条件]
https://github.com/Azure-Samples/php-docs-hello-worldにあるサンプル GitHub PHP プロジェクトの独自のフォーク。
Azure App Service でプロジェクト用に作成された PHP Web アプリ。 PHP Web アプリをすばやく作成するには、「 Azure App Service で PHP Web アプリを作成する」を参照してください。 独自の PHP GitHub プロジェクトと 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 サブスクリプション。 |
注
GitHub では 、認証、承認、または GitHub 組織または特定のリポジトリへのサインインが必要になる場合があります。 手順に従って、必要なプロセスを完了します。 詳細については、「Github リポジトリへのアクセス」を参照してください。
パイプラインの例
次の例では、Php as Linux Web App on Azure パイプライン テンプレートに基づくファイルazure-pipelines.yml、Build
とDeploy
の 2 つのステージがあります。
Build
ステージは PHP 8.2 をインストールし、タスクを実行してプロジェクト ファイルをアーカイブし、zip ビルド成果物を drop
という名前のパッケージに発行します。
Deploy
ステージは、Build
ステージが成功した場合に実行され、drop
タスクを使用して パッケージを App Service にデプロイします。
Azure テンプレートで Linux Web App として PHP を使用してパイプラインを作成すると、生成されたパイプラインによって、構成設定に基づいて変数やその他の値が設定され、使用されます。
注
Php から Linux Web App on Azureテンプレートとしてパイプラインを作成し、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 アプリとして認識し、[パイプラインの構成] ページで複数のパイプライン テンプレートを提案します。 この例では、 Azure 上の Linux Web App として PHP を選択します。
次の画面で、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 バージョンを使用する
Microsoft がホストする Ubuntu エージェントには、複数の PHP バージョンがインストールされています。
/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
引数を使用して、使用するディレクトリを指定できます。 たとえば、サブフォルダー /pkgs に composer.json がある場合は、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