Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services
In diesem Artikel wird gezeigt, wie Sie eine Pipeline in Azure-Pipelines erstellen, die eine PHP-Web-App erstellt und in Azure App Service bereitstellt. App Service ist ein HTTP-basierter Dienst zum Hosten von Webanwendungen, REST-APIs und mobilen Back-Ends. Die Pipeline verwendet eine kontinuierliche Integration von GitHub-Quelle und kontinuierlicher Übermittlung an App Service, um PHP-Apps automatisch zu erstellen, zu testen und bereitzustellen.
Azure Pipelines erstellt Ihre PHP-Projekte, ohne dass Sie eine Infrastruktur einrichten müssen. PHP wird zusammen mit vielen gängigen Bibliotheken für PHP-Versionen auf von Microsoft gehosteten Agents vorinstalliert. Sie können Linux-, macOS- oder Windows-Agents verwenden, um Ihre Builds auszuführen. Weitere Informationen dazu, welche PHP-Versionen vorinstalliert sind, finden Sie unter Software.
Voraussetzungen
Ihr eigener Fork des GitHub PHP-Beispiel-Projekts unter https://github.com/Azure-Samples/php-docs-hello-world.
Tipp
Das Beispielprojekt verwendet die Standardeinstellungen für die Zeitzone von PHP, die standardmäßig auf UTC für von Microsoft gehostete Agents festgelegt sind. Wenn Ihre App eine bestimmte Zeitzone benötigt, lesen Sie " Festlegen der PHP-Zeitzone".
Eine PHP-Web-App, die für das Projekt in Azure App Service erstellt wurde. Informationen zum schnellen Erstellen einer PHP-Web-App finden Sie unter Erstellen einer PHP-Web-App in Azure App Service. Sie können auch Ihr eigenes PHP GitHub-Projekt und Web-App verwenden.
Außerdem benötigen Sie die folgenden Voraussetzungen:
| Produkt | Anforderungen |
|---|---|
| Azure DevOps | – Ein Azure DevOps-Projekt. – Eine Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agenten. Sie können entweder einen parallelen Auftrag erwerben oder eine kostenlose Stufe anfordern. - Grundkenntnisse in YAML und Azure Pipelines. Weitere Informationen finden Sie unter Erstellen Ihrer ersten Pipeline. - Erlaubnisse: – Um eine Pipeline zu erstellen: Sie müssen sich in der Gruppe Mitwirkende befinden, und die Gruppe muss über die Berechtigung Buildpipeline erstellen auf "Zulassen" festgelegt sein. Mitglieder der Gruppe "Projektadministratoren " können Pipelines verwalten. – Um Dienstverbindungen zu erstellen: Sie müssen über die Rolle "Administrator " oder " Ersteller " für Dienstverbindungen verfügen. |
| GitHub (Englisch) | - Ein GitHub-Konto . – Eine GitHub-Dienstverbindung zum Autorisieren von Azure Pipelines. |
| Azurblau | Ein Azure-Abonnement. |
| Produkt | Anforderungen |
|---|---|
| Azure DevOps | – Ein Azure DevOps-Projekt. – Ein selbst gehosteter Agent. Um einen Agent zu erstellen, siehe selbstgehostete Agenten. - Grundkenntnisse in YAML und Azure Pipelines. Weitere Informationen finden Sie unter Erstellen Ihrer ersten Pipeline. - Erlaubnisse: – Um eine Pipeline zu erstellen: Sie müssen sich in der Gruppe Mitwirkende befinden, und die Gruppe muss über die Berechtigung Buildpipeline erstellen auf "Zulassen" festgelegt sein. Mitglieder der Gruppe "Projektadministratoren " können Pipelines verwalten. – Um Dienstverbindungen zu erstellen: Sie müssen über die Rolle "Administrator " oder " Ersteller " für Dienstverbindungen verfügen. |
| GitHub (Englisch) | - Ein GitHub-Konto . – Eine GitHub-Dienstverbindung zum Autorisieren von Azure Pipelines. |
| Azurblau | Ein Azure-Abonnement. |
Beispielpipeline
Das folgende Beispiel einer azure-pipelines.yml-Datei, basierend auf der Pipelinevorlage für eine PHP als Linux-Web-App auf Azure, hat zwei Phasen: Build und Deploy. Die Build Phase installiert PHP 8.2 und führt dann Aufgaben aus, um Ihre Projektdateien zu archivieren und ein ZIP-Buildartefakt in einem Paket mit dem Namen dropzu veröffentlichen.
Die Deploy Phase wird ausgeführt, wenn die Build Phase erfolgreich ist. Es stellt das drop Paket mithilfe der Azure Web App Aufgabe im App Service bereit. Wenn Sie die Vorlage 'PHP als Linux Web App auf Azure' verwenden, um Ihre Pipeline zu erstellen, werden die generierten Pipeline-Sätze, Variablen und andere Werte basierend auf Ihren Konfigurationseinstellungen festgelegt.
Hinweis
Wenn Sie Ihre Pipeline aus dem PHP als Linux Web App auf Azure-Vorlage erstellen und Ihre PHP-App "Composer" nicht verwendet, entfernen Sie die folgenden Zeilen aus der generierten Pipeline, bevor Sie sie speichern und ausführen. Die Vorlagenpipeline schlägt fehl, wenn composer.json im Repository fehlt.
- 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
Erstellen der YAML-Pipeline
Führen Sie die folgenden Schritte aus, um die Beispielpipeline zu erstellen und auszuführen:
Wählen Sie in Ihrem Azure DevOps-Projekt "Pipelines" im linken Navigationsmenü aus, und wählen Sie dann "Neue Pipeline " oder " Pipeline erstellen" aus, wenn diese Pipeline der erste im Projekt ist.
Wählen Sie auf der Seite "Wo ist Ihre Codeseite " die Option "GitHub" aus.
Wählen Sie auf der Seite " Repository auswählen " Ihr verzweigtes php-docs-hello-world-Repository aus.
Azure Pipelines erkennt den Code als PHP-App und schlägt mehrere Pipelinevorlagen auf der Seite "Pipeline konfigurieren" vor. Wählen Sie in diesem Beispiel PHP als Linux Web App in Azure aus.
Wählen Sie auf dem nächsten Bildschirm Ihr Azure-Abonnement und dann "Weiter" aus. Diese Aktion erstellt eine Dienstverbindung mit Ihren Azure-Ressourcen.
Wählen Sie auf dem nächsten Bildschirm Ihre Azure Web App aus, und wählen Sie "Überprüfen und Konfigurieren" aus. Azure Pipelines erstellt eine azure-pipelines.yml Datei und zeigt sie im YAML-Pipeline-Editor an.
Überprüfen Sie auf dem Bildschirm "YAML-Pipeline überprüfen" den Code für Ihre Pipeline. Wenn Sie fertig sind, wählen Sie "Speichern" und "Ausführen" aus.
Wählen Sie auf dem nächsten Bildschirm "Speichern" aus, und führen Sie den Vorgang erneut aus , um die neue azure-pipelines.yml Datei in Ihr Repository zu übernehmen und einen CI/CD-Build zu starten.
Hinweis
Wenn die Pipeline zum ersten Mal ausgeführt wird, fordert sie die Berechtigung für den Zugriff auf die von ihr erstellte Umgebung an. Wählen Sie "Erlauben" aus, um der Pipeline Zugriff auf die Umgebung zu gewähren.
Um Ihre Pipeline in Aktion zu sehen, wählen Sie den Auftrag auf der Seite Zusammenfassung aus. Wenn die Ausführung abgeschlossen ist, wählen Sie den Link App-Dienstanwendungs-URL im Schritt Azure-Web-App bereitstellen aus, um die bereitgestellte Web-App anzuzeigen.
Überprüfen Sie, ob die Bereitstellung erfolgreich war, indem Sie zur URL navigieren. Die Hello World-Ausgabe der Beispiel-App sollte angezeigt werden.
Anpassen der Pipeline
Sie können die Pipeline bearbeiten, indem Sie oben rechts auf der Seite "Zusammenfassung ausführen" das Symbol "Weitere Aktionen" auswählen und dann "Pipeline bearbeiten" auswählen oder oben rechts auf der Pipelineseite "Bearbeiten" auswählen. Jede Änderung, die Sie für das Repository vornehmen, startet eine neue CI/CD-Pipelineausführung.
Sie können die Pipeline auf verschiedene Arten anpassen:
Verwenden einer bestimmten PHP-Version
Microsoft-gehostete Ubuntu-Agents haben mehrere PHP-Versionen installiert. Ein symlink bei /usr/bin/php verweist auf die aktuelle PHP-Version, sodass die set-Version ausgeführt wird, wenn Sie ausführen php.
Um eine andere PHP-Version als die Standardversion zu verwenden, zeigen Sie mit dem update-alternatives Befehl auf den Symlink auf die gewünschte Version. Ändern Sie in Ihrer YAML-Pipeline den Wert der phpVersion Variablen in die gewünschte Version. Fügen Sie den folgenden Codeausschnitt zu den Bereichen mit den Bezeichnungen variables und steps Ihrer Build-Phase hinzu.
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)'
Festlegen der PHP-Zeitzone
Von Microsoft gehostete Agents verwenden standardmäßig UTC, sodass PHP-Funktionen wie date() und strtotime() UTC-Werte zurückgeben. Um eine andere Zeitzone in Ihren Pipelineskripts zu verwenden, legen Sie die Umgebungsvariable oder den TZ Aufruf date_default_timezone_set() in Ihrem PHP-Code fest.
Im folgenden Beispiel wird die Zeitzone für einen Skriptschritt auf "Eastern Time" festgelegt. Fügen Sie diesen Codeausschnitt zum steps Abschnitt Ihres Build-Jobs hinzu:
- script: |
export TZ='America/New_York'
php -r "date_default_timezone_set('America/New_York'); echo date('Y-m-d H:i:s T');"
displayName: 'Run PHP with Eastern time zone'
Eine Liste der unterstützten Zeitzonen-IDs finden Sie in der PHP-Liste der unterstützten Zeitzonen.
Installieren von Abhängigkeiten
Um Composer zum Installieren von Abhängigkeiten zu verwenden, fügen Sie den folgenden Codeausschnitt in den steps Abschnitt Ihres Buildauftrags ein:
- script: composer install --no-interaction --prefer-dist
displayName: 'composer install'
Wenn sich Ihre composer.json Datei nicht im Stammverzeichnis befindet, verwenden Sie das --working-dir Argument, um anzugeben, welches Verzeichnis verwendet werden soll. Wenn sich composer.json im Unterordner /pkgs befindet, verwenden Sie composer install --no-interaction --working-dir=pkgs. Sie können auch einen absoluten Pfad angeben, indem Sie die integrierte Systemvariable verwenden: --working-dir='$(System.DefaultWorkingDirectory)/pkgs'.
Testen mit PHPUnit
Um Tests mit PHPUnit auszuführen, installieren Sie sie zuerst als Entwicklungsabhängigkeit mit Composer, und führen Sie sie dann aus. Fügen Sie den folgenden Codeausschnitt zum steps Abschnitt Ihres Buildauftrags hinzu:
- script: composer require --dev phpunit/phpunit
displayName: 'Install PHPUnit'
- script: vendor/bin/phpunit --log-junit $(Build.StagingDirectory)/test-results.xml
displayName: 'Run tests with PHPUnit'
Beibehalten der PHP-Artefakte mit dem Builddatensatz
Um die Artefakte des Builds mit dem Builddatensatz zu speichern, schließen Sie die Aufgabe "Archivdateien " in Ihre Pipeline ein, und passen Sie optional den Wert an rootFolderOrFile , um zu ändern, was das Archiv enthält.
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
Problembehandlung
Dienstverbindungsfehler
Wenn Ihre Pipeline während der Bereitstellung mit einem Autorisierungsfehler fehlschlägt, überprüfen Sie, ob Ihre Azure Resource Manager-Dienstverbindung ordnungsgemäß konfiguriert ist und über die erforderlichen Berechtigungen für die Bereitstellung in Ihrem App Service verfügt.
Fehler bei der Installation von Composer
Wenn composer install fehlschlägt, überprüfen Sie, ob die Datei composer.json im Arbeitsverzeichnis vorhanden ist. Wenn sich die Datei in einem Unterverzeichnis befindet, verwenden Sie das --working-dir Argument. Wenn composer.json in Ihrem Repository nicht vorhanden ist, entfernen Sie den Schritt "Composer" aus der Pipeline.
PHP-Version nicht verfügbar
Wenn update-alternatives ein Fehler wie no alternatives for php8.x auftritt, ist die angeforderte PHP-Version nicht auf dem Agentimage installiert. Überprüfen Sie die Microsoft-gehostete Agent-Softwareliste auf verfügbare PHP-Versionen .
Bereitstellungsberechtigung verweigert
Wenn die Bereitstellungsphase mit einem Berechtigungsfehler fehlschlägt, überprüfen Sie Folgendes:
- Ihre Dienstverbindung verfügt über die Rolle "Mitwirkender" in der App Service-Ressource.
- Die Pipeline verfügt über die Berechtigung für den Zugriff auf die Umgebung. Wählen Sie bei der ersten Ausführung die Option "Zulassen" aus, wenn Sie dazu aufgefordert werden.