Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure DevOps Services
En este artículo se muestra cómo crear una canalización en Azure Pipelines que compila una aplicación web PHP e la implementa en Azure App Service. App Service es un servicio basado en HTTP para hospedar aplicaciones web, API REST y back-ends móviles. La canalización usa la integración continua desde el origen de GitHub y la entrega continua a App Service para compilar, probar e implementar aplicaciones PHP automáticamente.
Azure Pipelines compila los proyectos php sin tener que configurar ninguna infraestructura. PHP está preinstalado en agentes hospedados por Microsoft, junto con muchas bibliotecas comunes para versiones php. Puede usar agentes de Linux, macOS o Windows para ejecutar las compilaciones. Para obtener más información sobre qué versiones de PHP están preinstaladas, consulte Software.
Prerrequisitos
Su propia bifurcación del proyecto php de GitHub de ejemplo en https://github.com/Azure-Samples/php-docs-hello-world.
Sugerencia
El proyecto de ejemplo usa la configuración de zona horaria predeterminada de PHP, que tiene como valor predeterminado UTC en agentes hospedados por Microsoft. Si la aplicación necesita una zona horaria específica, consulte Establecer la zona horaria php.
Una aplicación web PHP creada para el proyecto en Azure App Service. Para crear rápidamente una aplicación web PHP, consulte Creación de una aplicación web PHP en Azure App Service. También puede usar su propio proyecto y aplicación web de GitHub de PHP.
También necesita los siguientes requisitos previos:
| Producto | Requisitos |
|---|---|
| Azure DevOps | - Un proyecto de Azure DevOps . - Tener la capacidad de ejecutar canalizaciones en agentes hospedados por Microsoft. Puede comprar un trabajo paralelo o solicitar un nivel gratis. - Conocimientos básicos de YAML y Azure Pipelines. Para más información, consulte Creación de la primera canalización. - Permisos: - Para crear una canalización: debe estar en el grupo Colaboradores y el grupo debe tener el permiso Crear canalización de compilación establecido en Permitir. Los miembros del grupo Administradores de proyectos pueden administrar canalizaciones. - Para crear conexiones de servicio: debe tener el rol Administrador o Creador para las conexiones de servicio. |
| GitHub | - Una cuenta de GitHub . - Una conexión de servicio de GitHub para autorizar Azure Pipelines. |
| Azure | Una suscripción de Azure. |
| Producto | Requisitos |
|---|---|
| Azure DevOps | - Un proyecto de Azure DevOps . - Un agente autohospedado. Para crear uno, consulte Agentes autohospedados. - Conocimientos básicos de YAML y Azure Pipelines. Para más información, consulte Creación de la primera canalización. - Permisos: - Para crear una canalización: debe estar en el grupo Colaboradores y el grupo debe tener el permiso Crear canalización de compilación establecido en Permitir. Los miembros del grupo Administradores de proyectos pueden administrar canalizaciones. - Para crear conexiones de servicio: debe tener el rol Administrador o Creador para las conexiones de servicio. |
| GitHub | - Una cuenta de GitHub . - Una conexión de servicio de GitHub para autorizar Azure Pipelines. |
| Azure | Una suscripción de Azure. |
Canalización de ejemplo
El siguiente archivo de ejemplo azure-pipelines.yml, basado en la plantilla de canalización de PHP como aplicación web en Linux en Azure, tiene dos fases: Build y Deploy. La Build fase instala PHP 8.2 y, a continuación, ejecuta tareas para archivar los archivos del proyecto y publicar un artefacto de compilación ZIP en un paquete denominado drop.
La Deploy fase se ejecuta si la Build fase tiene éxito. Despliega el drop paquete en App Service mediante la tarea Azure Web App. Cuando usas la plantilla PHP como aplicación web Linux en Azure para crear tu tubería, la tubería generada establece y utiliza variables y otros valores según tus configuraciones.
Nota:
Si crea la canalización desde la plantilla PHP como Aplicación Web de Linux en Azure, y la aplicación PHP no utiliza Composer, quite las siguientes líneas de la canalización generada antes de guardarla y ejecutarla. Se produce un error en la canalización de plantilla como si composer.json no estuviera presente en el repositorio.
- 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
Creación de la canalización de YAML
Para crear y ejecutar la canalización de ejemplo, siga estos pasos:
En el proyecto de Azure DevOps, seleccione Canalizaciones en el menú de navegación izquierdo y, a continuación, seleccione Nueva canalización o Crear canalización si esta canalización es la primera del proyecto.
En la página Where is your code (Dónde está el código ), seleccione GitHub.
En la página Seleccionar un repositorio, seleccione el repositorio bifurcado php-docs-hello-world.
Azure Pipelines reconoce el código como una aplicación PHP y sugiere varias plantillas de canalización en la página Configurar la canalización . En este ejemplo, seleccione PHP como Aplicación web Linux en Azure.
En la pantalla siguiente, seleccione la suscripción de Azure y seleccione Continuar. Esta acción crea una conexión de servicio a los recursos de Azure.
En la pantalla siguiente, seleccione la aplicación web de Azure y seleccione Validar y configurar. Azure Pipelines crea un archivo azure-pipelines.yml y lo muestra en el editor de canalizaciones DE YAML.
En la pantalla Revisar tu canalización YAML, revisa el código de tu canalización. Cuando esté listo, seleccione Guardar y ejecutar.
En la siguiente pantalla, seleccione Guardar y ejecute de nuevo para confirmar el nuevo archivo azure-pipelines.yml en el repositorio e iniciar una compilación de CI/CD.
Nota:
La primera vez que se ejecuta la canalización, solicita permiso para acceder al entorno que crea. Seleccione Permitir para conceder permiso a la canalización para acceder al entorno.
Para ver la canalización funcionando, seleccione el trabajo en la página de Resumen de ejecución. Cuando se complete la ejecución, seleccione el vínculo Dirección URL de la aplicación de App Service en el paso Implementar aplicación web de Azure para ver la aplicación web implementada.
Compruebe que la implementación se realizó correctamente; para ello, vaya a la dirección URL. Debería ver la salida Hello World! de la aplicación de ejemplo.
Personalización de la canalización
Para editar la canalización, seleccione el icono Más acciones situado en la esquina superior derecha de la página Resumen de ejecución y, a continuación, seleccione Editar canalización o seleccione Editar en la esquina superior derecha de la página de la canalización. Cada modificación que confirme en el repositorio inicia un nuevo proceso de pipeline de CI/CD.
Puede personalizar la canalización de varias maneras:
Uso de una versión específica de PHP
Los agentes de Ubuntu hospedados por Microsoft tienen instaladas varias versiones php. Un vínculo simbólico en /usr/bin/php apunta a la versión de PHP actual, por lo que al ejecutar php, se ejecuta la versión establecida.
Para usar una versión php distinta de la predeterminada, apunte el vínculo simbólico a la versión deseada mediante el update-alternatives comando . En la canalización de YAML, cambie el valor de la phpVersion variable a la versión que desee. Agregue el siguiente fragmento de código a las secciones variables y steps de su etapa de construcción.
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)'
Establecimiento de la zona horaria php
Los agentes hospedados por Microsoft de forma predeterminada son UTC, por lo que las funciones PHP como date() y strtotime() devuelven valores UTC. Para usar una zona horaria diferente en los scripts de canalización, defina la variable de entorno TZ o llame a date_default_timezone_set() en su código PHP.
En el ejemplo siguiente se establece la zona horaria en Hora oriental para un paso de script. Agregue este fragmento de código a la steps sección del trabajo de compilación:
- 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'
Para obtener una lista de los identificadores de zona horaria admitidos, consulte la lista php de zonas horarias admitidas.
Instalación de dependencias
Para usar Composer para instalar dependencias, agregue el siguiente fragmento de código a la steps sección del trabajo de compilación:
- script: composer install --no-interaction --prefer-dist
displayName: 'composer install'
Si el archivo composer.json no está en el directorio raíz, use el --working-dir argumento para especificar qué directorio usar. Por ejemplo, si composer.json está en la subcarpeta /pkgs, use composer install --no-interaction --working-dir=pkgs. También puede especificar una ruta de acceso absoluta mediante la variable del sistema integrada: --working-dir='$(System.DefaultWorkingDirectory)/pkgs'.
Prueba con PHPUnit
Para ejecutar pruebas con PHPUnit, instálela primero como una dependencia de desarrollo con Composer y, a continuación, ejecútelo. Agregue el siguiente fragmento de código a la steps sección del trabajo de compilación:
- 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'
Conservar los artefactos de PHP con el registro de compilación
Para guardar los artefactos de la compilación con el registro de compilación, incluya la tarea Archivar archivos en la canalización y, opcionalmente, personalice el valor de rootFolderOrFile para cambiar lo que incluye el archivo.
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
Solución de problemas
Errores de conexión de servicio
Si su canalización falla debido a un error de autorización durante el despliegue, compruebe que la conexión de servicio de Azure Resource Manager está configurada correctamente y que tiene los permisos necesarios para desplegar en su App Service.
Errores de instalación de Composer
Si composer install se produce un error, compruebe que el archivo composer.json está presente en el directorio de trabajo. Si el archivo está en un subdirectorio, use el --working-dir argumento . Si composer.json no existe en el repositorio, quite el paso Composer de la canalización.
Versión php no disponible
Si update-alternatives falla con un error similar a no alternatives for php8.x, la versión de PHP solicitada no está instalada en la imagen del agente. Compruebe la lista de software del agente hospedado por Microsoft para ver las versiones de PHP disponibles.
Permiso de implementación denegado
Si se produce un error en la fase de implementación con un error de permisos, verifique que:
- La conexión de servicio tiene el rol Colaborador en el recurso de App Service.
- La canalización tiene permiso para acceder al entorno. En la primera ejecución, seleccione Permitir cuando se le solicite.