Despliegue de PHP en Azure con AzureDevops

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

O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops

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.
O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops

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.
O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops

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».

O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops
Vista del marketplace.

II. Configuración básica

Completar la información básica de nuestro AppService. Suscripción, grupo de recursos, runtime, región, plan…

O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops
Vista del panel de configuración.

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

O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops
Modal de creación de 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:

O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops
Ventana de creación de un Pipeline.

IV. Configuración del Pipeline.

El lenguaje correspondiente en este caso “PHP as Linux Web App on Azure”:

O2O Digital Strategy - Despliegue de PHP en Azure con AzureDevops
Ventana de creación de un Pipeline.

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:

# PHP as Linux Web App on Azure
# 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:

  1. Nombre de la tarea: «Ejecutar análisis de SonarCloud».
  2. Tipo de tarea: «SonarCloud».
  3. Token de análisis de SonarCloud: Este token se puede generar en SonarCloud en la sección «Tokens».
  4. 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:

– task: SonarCloudPrepare@1

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/

 

 

Anterior

The Composable Architecture (TCA)

Siguiente

Machine Learning para desarrolladores/as Android

Talento O2O

¿Te apetece formar parte de nuestro equipo?

Mira las oportunidades