Erstellen und Testen von PHP-Apps

Azure DevOps Services

Verwenden Sie Continuous Integration und Continuous Delivery (CI/CD) in Azure Pipelines, um Ihre PHP-Projekte zu erstellen, bereitzustellen und zu testen.

Hier erfahren Sie, wie Sie eine PHP-Pipeline erstellen, eine Pipeline mit einem Beispielprojekt in Azure App Service bereitstellen und Ihre Umgebung konfigurieren.

Weitere Informationen zu Azure App Service finden Sie unter Erstellen einer PHP-Web-App in Azure App Service.

Voraussetzungen

Stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Ein GitHub-Konto, in dem Sie ein Repository erstellen können. Erstellen Sie ein kostenloses Konto.

  • Eine Azure DevOps-Organisation. Erstellen Sie ein kostenloses Konto. Wenn Ihr Team bereits über eine solche Organisation verfügt, stellen Sie sicher, dass Sie Administrator des Azure DevOps-Projekts sind, das Sie verwenden möchten.

  • Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agents. Um von Microsoft gehostete Agents zu verwenden, muss Ihre Azure DevOps-Organisation über Zugriff auf von Microsoft gehostete Parallelaufträge verfügen. Sie können entweder einen Parallelauftrag erwerben oder eine kostenlose Bewilligung anfordern.

  • Ein Azure-Konto. Falls Sie keines haben, können Sie kostenlos eines erstellen.

    Tipp

    Wenn Sie neu in diesem Bereich sind, ist es am einfachsten, wenn Sie dieselbe E-Mail-Adresse als Besitzer*in der Azure Pipelines-Organisation und des Azure-Abonnements verwenden.

Abrufen des Codes

Wenn Sie bereits über eine App in GitHub verfügen, die Sie bereitstellen möchten, können Sie eine Pipeline für diesen Code erstellen. Wenn Sie jedoch noch keine Erfahrung mit diesen Vorgängen haben, empfiehlt es sich, den Beispielcode zu verwenden. Forken Sie in diesem Fall das folgende Repository auf GitHub:

https://github.com/Azure-Samples/basic-php-composer

Erstellen einer Pipeline

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.

  2. Wählen Sie PHP auf der Registerkarte Konfigurieren aus.

  3. Sehen Sie sich Ihre neue Pipeline genau an. Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus.

    Save and run button in a new YAML pipeline

  4. Sie werden aufgefordert, eine neue azure-pipelines.yml-Datei in Ihr Repository zu committen. Wählen Sie erneut Speichern und ausführen aus.

    Wenn Sie Ihre Pipeline in Aktion sehen möchten, wählen Sie den Buildauftrag aus.

    Sie verfügen jetzt über eine funktionierende YAML-Pipeline (azure-pipelines.yml) in Ihrem Repository, die Sie anpassen können.

Wenn Sie Änderungen an Ihrer Pipeline vornehmen möchten, wählen Sie Ihre Pipeline auf der Seite Pipelines aus, und bearbeiten Sie dann die Datei azure-pipelines.yml.

In den folgenden Abschnitten erfahren Sie mehr über die gängigen Möglichkeiten zum Anpassen Ihrer Pipeline.

Bereitstellen in App Service

Sie können eine Pipeline verwenden, um eine PHP-Web-App zu erstellen und in Azure App Service bereitzustellen. Azure App Service ist ein HTTP-basierter Dienst zum Hosten von Webanwendungen, REST-APIs und mobilen Back-Ends.

Sie können Tasks verwenden, um Ihre Dateien zu archivieren, ein Buildartefakt zu veröffentlichen und dann den Azure Web App-Task zum Bereitstellen in Azure App Service.

Diese Pipelines haben zwei Phasen: die Build- und die Bereitstellungsphase. In der Buildphase wird PHP 7.4 mit „composer“ installiert. Die App-Dateien werden archiviert und in ein Paket mit dem Namen drop hochgeladen. Während der Bereitstellungsphase wird das Paket drop in Azure App Service als Web-App bereitgestellt.


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: '7.4'
  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

Konfigurieren der Buildumgebung

Sie können Azure Pipelines verwenden, um Ihre PHP-Projekte zu erstellen, ohne eine Infrastruktur einrichten zu müssen.

Verwenden einer bestimmten PHP-Version

PHP ist auf von Microsoft gehosteten Agents vorinstalliert, zusammen mit vielen gängigen Bibliotheken für die jeweilige PHP-Version. Sie können Linux-, macOS- oder Windows-Agents verwenden, um Ihre Builds auszuführen. Weitere Informationen und die genauen Versionen von PHP, die vorinstalliert werden, finden Sie unter Von Microsoft gehostete Agents.

Auf dem von Microsoft gehosteten Ubuntu-Agent sind mehrere Versionen von PHP installiert. Der Symlink /usr/bin/php verweist auf die aktuell festgelegte PHP-Version, sodass diese bei der Ausführung von php ausgeführt wird.

Um eine andere PHP-Version als die Standardversion zu verwenden, kann der Symlink mit dem Tool update-alternatives in diese Version geändert werden. Legen Sie die gewünschte PHP-Version fest, indem Sie der Datei azure-pipelines.yml den folgenden Codeausschnitt hinzufügen und den Wert der Variablen phpVersion ändern.

pool:
  vmImage: 'ubuntu-latest'

variables:
  phpVersion: 7.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)'

Installieren von Abhängigkeiten

Um „composer“ zum Installieren von Abhängigkeiten zu verwenden, fügen den folgenden Codeausschnitt zur Datei azure-pipelines.yml hinzu.

- script: composer install --no-interaction --prefer-dist
  displayName: 'composer install'

Testen mit phpunit

Um Tests mit phpunit auszuführen, fügen Sie der Datei azure-pipelines.yml den folgenden Codeausschnitt hinzu:

- script: ./phpunit
  displayName: 'Run tests with phpunit'

Speichern der PHP-App mit dem Builddatensatz

Um die Artefakte dieses Builds mit dem Builddatensatz zu speichern, fügen Sie der Datei azure-pipelines.yml den folgenden Codeausschnitt hinzu. Passen Sie optional den Wert von rootFolderOrFile an, um den Inhalt des Archivs zu ändern.

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(system.defaultWorkingDirectory)'
    includeRootFolder: false
- task: PublishBuildArtifacts@1

Verwenden eines benutzerdefinierten Speicherorts für die Composerdatei

Wenn sich Ihre Datei „composer.json“ in einem Unterordner statt im Stammverzeichnis befindet, können Sie das Argument --working-dir verwenden, um „composer“ mitzuteilen, welches Verzeichnis verwendet werden soll. Beispiel für eine „composer.json“-Datei, die sich im Unterordner pkgs befindet:

composer install --no-interaction --working-dir=pkgs

Sie können auch den absoluten Pfad mithilfe der integrierten Systemvariablen angeben:

composer install --no-interaction --working-dir='$(system.defaultWorkingDirectory)/pkgs'