Compilación y prueba de aplicaciones PHP

Azure DevOps Services

Use la integración continua y entrega continua (CI/CD) de Azure Pipelines para compilar, implementar y probar los proyectos PHP.

Aprenda a crear una canalización PHP, a implementar una canalización con un proyecto de ejemplo en Azure App Service y a configurar el entorno.

Para más información sobre Azure App Service, consulte Creación de una aplicación web PHP en Azure App Service.

Requisitos previos

Asegúrese de que dispone de lo siguiente:

  • Una cuenta de GitHub en la que pueda crear un repositorio. cree una de forma gratuita.

  • Una organización de Azure DevOps. cree una de forma gratuita. Si el equipo ya tiene una, asegúrese de que usted es el administrador del proyecto de Azure DevOps que desea usar.

  • Tener capacidad para ejecutar canalizaciones en agentes hospedados por Microsoft. Para usar agentes hospedados por Microsoft, la organización de Azure DevOps debe tener acceso a trabajos paralelos hospedados por Microsoft. Puede comprar un trabajo paralelo o solicitar una concesión gratuita.

  • Una cuenta de Azure. Si no tiene ninguna, puede crearla gratis.

    Sugerencia

    Si no está familiarizado con este proceso, la manera más fácil de empezar es usar la misma dirección de correo electrónico que el propietario de la organización de Azure Pipelines y la suscripción de Azure.

  • Si va a implementar en Azure App Service, debe tener una aplicación web creada.

Obtención del código

Si ya tiene una aplicación en GitHub que quiere implementar, puede intentar crear una canalización para ese código. Pero si es un usuario nuevo, es posible que sea mejor comenzar con nuestro código de ejemplo. En ese caso, bifurque el repositorio siguiente en GitHub:

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

Crear una canalización

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Vaya a las canalizaciones y seleccione Nueva canalización.

  3. Seleccione la ubicación de origen (GitHub, Git de Azure Repos, Bitbucket Cloud u otros repositorios de Git).

  4. Seleccione el repositorio donde se encuentre el código.

  5. Seleccione PHP en la pestaña Configurar.

  6. Asegúrese de que la versión de PHP es 8.3.

  7. Examine la canalización nueva. Cuando esté listo, seleccione Guardar y ejecutar.

    Botón Guardar y ejecutar en una canalización YAML nueva

  8. Se le pedirá que confirme un archivo azure-pipelines.yml nuevo en el repositorio. Selecciona Guardar y ejecutar nuevamente.

    Si quiere ver la canalización en acción, seleccione el trabajo de compilación.

    Ahora ya tiene una canalización YAML en funcionamiento (azure-pipelines.yml) en el repositorio que está lista para que la personalice.

Cuando quiera realizar cambios en la canalización, selecciónela en la canalización en la página Canalizaciones y, luego, haga clic en Editar para modificar el archivo azure-pipelines.yml.

Obtenga más información sobre algunas de las formas más comunes de personalizar la canalización.

Implementación en App Service

Use una canalización para compilar una aplicación web PHP e implementarla en Azure App Service. Azure App Service es un servicio basado en HTTP para hospedar aplicaciones web, API de REST y back-ends para dispositivos móviles.

Puede usar tareas para archivar los archivos, publicar un artefacto de compilación y, luego, usar la tarea de aplicación web de Azure para implementar en Azure App Service.

Esta canalización tiene dos fases: compilación e implementación. En la etapa de compilación, PHP 8.3 se instala con Composer. Los archivos de la aplicación se archivan y se cargan en un paquete denominado drop. Durante la fase de implementación, el paquete drop se implementa en Azure App Service como una aplicación 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

Configuración del entorno de compilación

Use Azure Pipelines para compilar los proyectos PHP sin configurar la infraestructura.

Uso de una versión de PHP específica

PHP está preinstalado en agentes hospedados por Microsoft, junto con muchas bibliotecas comunes por cada versión PHP. Puede usar agentes de Linux, macOS o Windows para ejecutar las compilaciones. Para más información y conocer las versiones exactas de PHP que están preinstaladas, consulte Agentes hospedados por Microsoft.

Son varias las versiones de PHP que se instalan en el agente de Ubuntu hospedado por Microsoft. Un vínculo simbólico en /usr/bin/php apunta a la versión de PHP establecida actualmente, de modo que, al ejecutar php, se ejecuta la versión establecida.

Para usar una versión PHP distinta de la predeterminada, el vínculo simbólico se puede apuntar a esa versión mediante la herramienta update-alternatives. Establezca la versión PHP que desea; para ello, agregue el fragmento de código siguiente al archivo azure-pipelines.yml y cambie el valor 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)'

Instalar dependencias

Para usar Composer para instalar dependencias, agregue este fragmento de código al archivo azure-pipelines.yml.

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

Prueba con phpunit

Para ejecutar pruebas con phpunit, agregue este fragmento de código al archivo azure-pipelines.yml.

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

Conservación de la aplicación PHP con el registro de compilación

Para guardar los artefactos de esta compilación con el registro de compilación, agregue este fragmento de código al archivo azure-pipelines.yml. También puede personalizar el valor de rootFolderOrFile para modificar lo que se incluye en el archivo.

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

Uso de una ubicación de Composer personalizada

Si composer.json está en una subcarpeta en lugar del directorio raíz, puede usar el argumento --working-dir para indicar a Composer qué directorio se va a usar. Por ejemplo, si composer.json está dentro de la subcarpeta pkgs

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

También puede especificar la ruta de acceso absoluta mediante las variables integradas del sistema:

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