En este artículo vamos a ver cómo desplegar una aplicación php 8.0.2 en Azure AppService y configurar la integración continua con Azure DevOps. También añadiremos integración con SonarCloud para asegurarse de que el código cumpla con los estándares de calidad.
1. Qué es App Service
2. Qué es Azure Devops
3. SonarCloud
4. Pasos para crear un App Service para PHP en Azure
5. Pasos para despliegue con Azure DevOps
6. Integración con SonarCloud
7. Bibliografía
App Service y Azure DevOps
1. Qué es App Service
App Service es un servicio administrado para implementar y escalar aplicaciones .NET, .NET Core, Node.js, Java, Python o PHP en contenedores o ejecutándose en Windows o Linux.
2. Qué es Azure DevOps
Azure DevOps es una plataforma de gestión de proyectos. Proporciona un conjunto integrado de servicios y herramientas para administrar los proyectos de software, desde el planeamiento y el desarrollo a través de pruebas e implementación. Ayuda a los desarrolladores a implementar una integración continua.
3. SonarCloud
SonarCloud es un servicio de análisis estático de código basado en la nube que ayuda a los desarrolladores a mejorar la calidad y la seguridad de su código. Ofrece análisis automáticos de código en 25 lenguajes de programación diferentes, incluyendo Java, Python, JavaScript, C/C++, y PHP.
4. Pasos para crear un App Service para PHP en Azure
I. Crear un Nuevo recurso
El primer paso es acceder al marketplace de Azure y buscar «App Service» y, entre las opciones que tenemos disponibles, seleccionar «Web App».
II. Configuración básica
Completar la información básica de nuestro AppService. Suscripción, grupo de recursos, runtime, región, plan…
III. Creación de la base de datos (opcional)
En caso de necesitarlo también podremos crear la base de datos en el proceso de creación de AppService.
IV. Creación y despliegue del AppService
Una vez creado y desplegado en azure el AppService tendremos nuestro entorno de trabajo listo para desplegar nuestro código.
5. Pasos para despliegue con Azure DevOps:
I. Crear un nuevo proyecto
II. Clonar el repositorio.
Una vez creado el proyecto y el repositorio inicial el siguiente paso será clonarlo en un entorno local.
III. Crear un Pipeline de compilación.
Un pipeline es un proceso automatizado que compila el código fuente de la aplicación web y genera un paquete. En el asistente de creación seleccionaremos primero el origen de nuestro repositorio. En nuestro caso Azure Repos Git:
IV. Configuración del Pipeline.
El lenguaje correspondiente en este caso “PHP as Linux Web App on Azure”:
V. Selección de la suscripción.
A continuación, seleccionamos la suscripción en la que deseemos desplegar y el Web App.
VI. Personalización del YAML.
Nos generará un YAML con la configuración del pipeline que podremos personalizar según nuestras necesidades.
Ejemplo de YAML en el que se instala php 8.2.0 y los módulos necesarios en la instancia que levanta Azure DevOps, se realiza el build, se descargan certificados, y se hace la subida al App Service:
# Build, package and deploy your PHP project to Azure Linux Web App.
# Add steps that run tests and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/php trigger:
– develop variables:
# Azure Resource Manager connection created during pipeline creation
azureSubscription: ‘subscription-id’
# Web app name
webAppName: ‘webAppName’
# Agent VM image name
vmImageName: ‘ubuntu-22.04’
# Environment name
environmentName: ‘environmentName’
# Root folder under which your composer.json file is available.
rootFolder: $(System.DefaultWorkingDirectory)
stages:
– stage: Build
displayName: Build stage
variables:
phpVersion: ‘8.2.0’
jobs:
– job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
– script:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 -y
sudo apt install php8.2-cli php8.2-common php8.2-imap php8.2-redis php8.2-xml php8.2-zip php8.2-mbstring
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: DownloadSecureFile@1
name: jwtCertificatePrivate
displayName: ‘Download JWT private certificate’
inputs:
secureFile: ‘private.pem’
– task: DownloadSecureFile@1
name: jwtCertificatePublic
displayName: ‘Download JWT public certificate’
inputs:
secureFile: ‘public.pem’
– task: CopyFiles@2
inputs:
sourceFolder: «$(Agent.TempDirectory)»
contents: |
public.pem
private.pem
targetFolder: $(rootFolder)/config/jwt/
displayName: «Import JWT certificate»
– 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 : webAppName’
inputs:
azureSubscription: $(azureSubscription)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
VII. Ejecución del Pipeline.
Ejecutar pipeline y comprobar que se ha desplegado correctamente en nuestro AppService.
Integración con SonarCloud
Para poder realizar el análisis con SonarCloud primero tendremos que configurar la integración de SonarCloud en Azure DevOps. Para ello, crearemos una nueva tarea en la fase de compilación del pipeline de Azure DevOps. La tarea debe tener la siguiente configuración:
- Nombre de la tarea: «Ejecutar análisis de SonarCloud».
- Tipo de tarea: «SonarCloud».
- Token de análisis de SonarCloud: Este token se puede generar en SonarCloud en la sección «Tokens».
- Configuración de SonarCloud: En esta sección se deben especificar los parámetros de la conexión a SonarCloud, como el servidor, la clave del proyecto y el token de acceso.
Ejemplo de configuración en YML:
inputs:
SonarCloud: ‘GT PS’
organization: ‘organization’
scannerMode: ‘CLI’
configMode: ‘manual’
cliProjectKey: ‘project-key’
cliProjectName: ‘project-Name’
cliSources: ‘.’
– task: SonarCloudAnalyze@1
– task: SonarCloudPublish@1
inputs:
pollingTimeoutSec: ‘300’
Una vez configurada la tarea nos añadirá la configuración a nuestro YAML del pipeline correspondiente.
Ejecutamos nuestro pipeline que llamará al servicio SonarCloud y generará un informe con los resultados del análisis de calidad del código
En resumen, con Azure DevOps y SonarCloud podemos desplegar aplicaciones PHP de forma sencilla y con la garantía de unos estándares de código de calidad.
Bibliografía
https://learn.microsoft.com/es-es/azure/devops/user-guide/services?view=azure-devops
https://en.wikipedia.org/wiki/Microsoft_Azure
https://es.wikipedia.org/wiki/PHP
https://docs.sonarsource.com/sonarcloud/getting-started/azure-devops/