Partager via


Générer, tester et déployer des applications PHP

Azure DevOps Services

Cet article explique comment créer un pipeline dans Azure Pipelines qui génère une application web PHP et le déploie sur Azure App Service. App Service est un service HTTP pour l’hébergement d’applications web, d’API REST et de back-ends mobiles. Le pipeline utilise l’intégration continue de la source GitHub et de la livraison continue à App Service pour générer, tester et déployer automatiquement des applications PHP.

Azure Pipelines génère vos projets PHP sans avoir à configurer une infrastructure. PHP est préinstallé sur les agents hébergés par Microsoft, ainsi que de nombreuses bibliothèques courantes pour les versions de PHP. Vous pouvez utiliser des agents Linux, macOS ou Windows pour exécuter vos builds. Pour plus d’informations sur les versions PHP préinstallées, consultez Software.

Conditions préalables

Vous avez également besoin des prérequis suivants :

Produit Exigences
Azure DevOps - Un projet Azure DevOps .
- Possibilité d’exécuter des pipelines sur des agents hébergés par Microsoft. Vous pouvez acheter un travail parallèle ou demander un niveau gratuit.
- Connaissance de base de YAML et d’Azure Pipelines. Pour plus d’informations, consultez Créer votre premier pipeline.
- Autorisations :
     - Pour créer un pipeline : vous devez être dans le groupe Contributeurs et le groupe doit disposer de la permission Créer un pipeline de build définie sur Autoriser. Les membres du groupe Administrateurs de projet peuvent gérer les pipelines.
    - Pour créer des connexions de service : vous devez avoir le rôle Administrateur ou Créateur pour les connexions de service.
Lien avec GitHub - Un compte GitHub .
- Connexion de service GitHub pour autoriser Azure Pipelines.
Microsoft Azure Un abonnement Azure.
Produit Exigences
Azure DevOps - Un projet Azure DevOps .
- Un agent auto-hébergé. Pour en créer un, consultez les agents auto-hébergés.
- Connaissance de base de YAML et d’Azure Pipelines. Pour plus d’informations, consultez Créer votre premier pipeline.
- Autorisations :
    - Pour créer un pipeline : vous devez être dans le groupe Contributeurs et le groupe doit disposer de la permission Créer un pipeline de build définie sur Autoriser. Les membres du groupe Administrateurs de projet peuvent gérer les pipelines.
    - Pour créer des connexions de service : vous devez avoir le rôle Administrateur ou Créateur pour les connexions de service.
Lien avec GitHub - Un compte GitHub .
- Connexion de service GitHub pour autoriser Azure Pipelines.
Microsoft Azure Un abonnement Azure.

Note

GitHub peut nécessiter une authentification, une autorisation ou une connexion à des organisations GitHub ou à des référentiels spécifiques. Suivez les instructions pour terminer les processus requis. Pour plus d’informations, consultez Accès aux référentiels GitHub.

Exemple de pipeline

Le fichier d'exemple suivant azure-pipelines.yml basé sur le modèle de pipeline PHP en tant qu'application web Linux sur Azure comporte deux étapes, Build et Deploy. L’étape Build installe PHP 8.2, puis exécute des tâches pour archiver vos fichiers projet et publier un artefact de build ZIP dans un package nommé drop.

L’étape Deploy s’exécute si l’étape Build réussit et déploie le drop package sur App Service à l’aide de la tâche Azure Web App . Lorsque vous utilisez le modèle PHP en tant qu'application web Linux sur Azure pour créer votre pipeline, le pipeline généré définit et utilise des variables et d'autres valeurs en fonction de vos paramètres de configuration.

Note

Si vous créez votre pipeline à partir de PHP en tant qu’application web Linux sur un modèle Azure et que votre application PHP n’utilise pas Composer, supprimez les lignes suivantes du pipeline généré avant de l’enregistrer et de l’exécuter. Le pipeline de modèle échoue dans l'état actuel si composer.json n'est pas présent dans le dépôt.

    - 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

Créer le pipeline YAML

Pour créer et exécuter l’exemple de pipeline, procédez comme suit :

  1. Dans votre projet Azure DevOps, sélectionnez Pipelines dans le menu de navigation de gauche, puis sélectionnez Nouveau pipeline ou Créer un pipeline si ce pipeline est le premier dans le projet.

  2. Dans la page Où se trouve votre code , sélectionnez GitHub.

  3. Dans la page Sélectionner un référentiel , sélectionnez votre dépôt php-docs-hello-world forked.

  4. Azure Pipelines reconnaît le code en tant qu’application PHP et suggère plusieurs modèles de pipeline sur la page Configurer votre pipeline . Pour cet exemple, sélectionnez PHP en tant qu’application web Linux sur Azure.

  5. Dans l’écran suivant, sélectionnez votre abonnement Azure et sélectionnez Continuer. Cette action crée une connexion de service à vos ressources Azure.

  6. Dans l’écran suivant, sélectionnez votre application web Azure, puis sélectionnez Valider et configurer. Azure Pipelines crée un fichier azure-pipelines.yml et l’affiche dans l’éditeur de pipeline YAML.

  7. Dans l’écran Vérifier votre YAML de pipeline, passez en revue le code de votre pipeline. Lorsque vous êtes prêt, sélectionnez Enregistrer et exécuter.

    Capture d’écran montrant le bouton Enregistrer et exécuter dans un nouveau pipeline YAML.

  8. Dans l’écran suivant, sélectionnez Enregistrer et réexécuter pour valider le nouveau fichier azure-pipelines.yml dans votre dépôt et démarrer une build CI/CD.

    Note

    La première fois que le pipeline s’exécute, il demande l’autorisation d’accéder à l’environnement qu’il crée. Sélectionnez Autoriser pour permettre au pipeline d’accéder à l’environnement.

  9. Pour la surveillance de votre pipeline en action, sélectionnez la tâche sur la page Résumé de l’exécution. Une fois l’exécution terminée, sélectionnez le lien URL de l’application App Service dans l’étape Déployer l’application web Azure pour afficher l’application web déployée.

Personnaliser le pipeline

Vous pouvez modifier le pipeline en sélectionnant l’icône Autres actions en haut à droite de la page Résumé de l’exécution, puis en sélectionnant Modifier le pipeline, ou en sélectionnant Modifier en haut à droite de la page du pipeline. Chaque modification que vous validez dans le référentiel lance une nouvelle exécution de pipeline CI/CD.

Vous pouvez personnaliser le pipeline de plusieurs façons :

Utiliser une version PHP spécifique

Plusieurs versions PHP sont installées sur les agents Ubuntu hébergés par Microsoft. Un lien symbolique sur /usr/bin/php pointe vers la version actuelle de PHP. Par conséquent, lorsque vous exécutez php, la version définie s’exécute.

Pour utiliser une version PHP autre que la version par défaut, vous pouvez pointer le lien symbolique vers la version souhaitée à l’aide de la update-alternatives commande. Dans votre pipeline YAML, remplacez la valeur de la phpVersion variable par la version souhaitée et utilisez l’extrait de code suivant :

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)'

Installer des dépendances

Pour utiliser Composer pour installer les dépendances, incluez l’extrait de code suivant dans votre fichier azure-pipelines.yml :

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

Si votre fichier composer.json n’est pas dans le répertoire racine, vous pouvez utiliser l’argument pour spécifier le --working-dir répertoire à utiliser. Par exemple, si composer.json se trouve dans le sous-dossier /pkgs, utilisez composer install --no-interaction --working-dir=pkgs. Vous pouvez également spécifier un chemin absolu à l’aide de la variable système intégrée : --working-dir='$(System.DefaultWorkingDirectory)/pkgs'.

Tester avec PHPUnit

Pour exécuter des tests avec PHPUnit, ajoutez l’extrait de code suivant à votre fichier azure-pipelines.yml :

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

Conserver les artefacts PHP avec l’enregistrement de compilation

Pour enregistrer les artefacts du build avec l’enregistrement du build, incluez la tâche Fichiers d’archivage dans votre pipeline et personnalisez éventuellement la valeur de rootFolderOrFile pour modifier le contenu de l’archive.

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false