Générer et tester des applications PHP

Azure DevOps Services

Utilisez l’intégration continue et la livraison continue (CI/CD) d’Azure Pipelines pour générer, déployer et tester vos projets PHP.

Découvrez comment générer un pipeline PHP, déployer un pipeline avec un échantillon de projet sur Azure App Service et comment configurer votre environnement.

Pour en savoir plus sur Azure App Service, consultez Créer une application web PHP dans Azure App Service.

Prérequis

Vérifiez que vous disposez des éléments suivants :

  • Un compte GitHub dans lequel vous pouvez créer un référentiel. Créez-en un gratuitement.

  • Une organisation Azure DevOps. Créez-en un gratuitement. Si votre équipe en a déjà une, vérifiez que vous êtes bien un administrateur du projet Azure DevOps que vous souhaitez utiliser.

  • Possibilité d’exécuter des pipelines sur des agents hébergés par Microsoft. Pour utiliser des agents hébergés par Microsoft, votre organisation Azure DevOps doit avoir accès aux travaux parallèles hébergés par Microsoft. Vous pouvez acheter un travail parallèle ou demander un octroi gratuit.

  • Un compte Azure. Si vous n’en avez pas, vous pouvez en créer un gratuitement.

    Conseil

    Si vous débutez, le moyen le plus simple de commencer consiste à utiliser la même adresse e-mail que le propriétaire de l’organisation Azure Pipelines et de l’abonnement Azure.

  • Si vous comptez déployer vers Azure App Service, vous devez avoir créé une webapp.

Obtenir le code

Si vous disposez déjà d’une application dans GitHub que vous souhaitez déployer, vous pouvez créer un pipeline pour ce code. Toutefois, si vous êtes un nouvel utilisateur, nous vous conseillons de commencer avec notre exemple de code. Dans ce cas, dupliquez (fork) le référentiel suivant sur GitHub :

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

Créer un pipeline

  1. Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.

  2. Allez dans Pipelines, puis sélectionnez Nouveau pipeline.

  3. Sélectionnez l'emplacement de votre source (GitHub, Azure Repos Git, Bitbucket Cloud ou d'autres référentiels Git).

  4. Sélectionnez le référentiel où se trouve votre code.

  5. Sélectionnez PHP dans l’onglet Configurer.

  6. Assurez-vous que la version de PHP est bien la 8.3.

  7. Examinez votre nouveau pipeline. Lorsque vous êtes prêt, sélectionnez Enregistrer et exécuter.

    Bouton Enregistrer et exécuter dans un nouveau pipeline YAML

  8. Vous êtes invité à valider un nouveau fichier azure-pipelines.yml dans votre référentiel. Sélectionnez de nouveau Save and run (Enregistrer et exécuter).

    Si vous souhaitez voir votre pipeline en action, sélectionnez le travail de build.

    Vous disposez maintenant d’un pipeline YAML opérationnel (azure-pipelines.yml) dans votre référentiel qui est prêt à être personnalisé !

Lorsque vous souhaitez apporter des modifications à votre pipeline, sélectionnez-le dans la page Pipelines, puis Modifiez le fichier azure-pipelines.yml.

Lisez la suite pour découvrir quelques-unes des façons les plus courantes de personnaliser votre pipeline.

Déployer sur App Service

Utiliser un pipeline pour générer une application web PHP et déployer sur Azure App Service. Azure App Service est un service basé sur HTTP pour l’hébergement d’applications web, d’API REST et de back-ends mobiles.

Vous pouvez utiliser des tâches pour archiver vos fichiers, publier un artefact de build, puis utiliser la tâche Application web Azure pour déployer sur Azure App Service.

Ce pipeline comporte deux étapes : Construire et Déployer. Dans la phase Construction, PHP 8.3 est installé avec Composer. Les fichiers d’application sont archivés et chargés dans un package nommé drop. Pendant la phase de déploiement, le package drop est déployé sur Azure App Service en tant qu’application web.


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

Configurer l’environnement de build

Utilisez Azure Pipelines pour générer vos projets PHP sans configurer l’infrastructure.

Utiliser une version de PHP spécifique

PHP est préinstallé sur les agents hébergés par Microsoft, ainsi que de nombreuses bibliothèques courantes par version de PHP. Vous pouvez utiliser des agents Linux, macOS ou Windows pour exécuter vos builds. Pour obtenir plus d’informations et les versions exactes de PHP qui sont préinstallées, consultez Agents hébergés par Microsoft.

Sur l’agent Ubuntu hébergé par Microsoft, plusieurs versions de PHP sont installées. Un lien symbolique à /usr/bin/php pointe vers la version de PHP actuellement définie, de sorte que lorsque vous exécutez php, la version définie s’exécute.

Pour utiliser une version de PHP autre que la version par défaut, le lien symbolique peut être pointé vers cette version à l’aide de l’outil update-alternatives. Définissez la version de PHP souhaitée en ajoutant l’extrait de code suivant à votre fichier azure-pipelines.yml et modifiez la valeur de la variable phpVersion.

pool:
  vmImage: 'ubuntu-latest'

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

Installer des dépendances

Pour utiliser Composer pour installer des dépendances, ajoutez l’extrait de code suivant à votre fichier azure-pipelines.yml.

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

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 l’application PHP avec l’enregistrement de build

Pour enregistrer les artefacts de cette build avec l’enregistrement de build, ajoutez l’extrait de code suivant à votre fichier azure-pipelines.yml. Si vous le souhaitez, personnalisez la valeur de rootFolderOrFile pour modifier ce qui est inclus dans l’archive.

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

Utilisation d’un emplacement personnalisé de Composer

Si votre fichier composer.json se trouve dans un sous-dossier au lieu du répertoire racine, vous pouvez utiliser l’argument --working-dir pour indiquer à Composer quel répertoire utiliser. Par exemple, si votre fichier composer.json se trouve dans le sous-dossier pkgs

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

Vous pouvez également spécifier le chemin d’accès absolu à l’aide des variables système intégrées :

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