次の方法で共有


PHP アプリのビルド、テスト、デプロイ

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 バージョンの詳細については、「 ソフトウェア」を参照してください。

[前提条件]

次の前提条件も必要です。

製品 必要条件
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、BuildDeployの 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 パイプラインを作成する

サンプル パイプラインを作成して実行するには、次の手順を実行します。

  1. Azure DevOps プロジェクトで、左側のナビゲーション メニューから [ パイプライン ] を選択し、プロジェクトの最初のパイプラインである場合は [ 新しいパイプライン ] または [パイプラインの作成 ] を選択します。

  2. [コードの場所] ページで、GitHub を選択します。

  3. [ リポジトリの選択 ] ページで、フォークした php-docs-hello-world リポジトリを選択します。

  4. Azure Pipelines は、コードを PHP アプリとして認識し、[パイプラインの構成] ページで複数のパイプライン テンプレートを提案します。 この例では、 Azure 上の Linux Web App として PHP を選択します。

  5. 次の画面で、Azure サブスクリプションを選択し、[ 続行] を選択します。 このアクションにより、Azure リソースへのサービス接続が作成されます。

  6. 次の画面で、Azure Web アプリを選択し、[ 検証と構成] を選択します。 Azure Pipelines によって azure-pipelines.yml ファイルが作成され、YAML パイプライン エディターに表示されます。

  7. [ パイプライン YAML の確認 ] 画面で、パイプラインのコードを確認します。 準備ができたら、[ 保存して実行] を選択します。

    新しい YAML パイプラインの [保存して実行] ボタンを示すスクリーンショット。

  8. 次の画面で、[ 保存] を選択して再度実行し 、新しい azure-pipelines.yml ファイルをリポジトリにコミットし、CI/CD ビルドを開始します。

    パイプラインが初めて実行されると、パイプラインは作成した環境にアクセスするためのアクセス許可を要求します。 [ 許可] を選択して、パイプラインが環境にアクセスするためのアクセス許可を付与します。

  9. パイプラインの動作を監視するには、[ 実行の概要] ページでジョブを選択します。 実行が完了したら、[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引数を使用して、使用するディレクトリを指定できます。 たとえば、サブフォルダー /pkgscomposer.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