Implementación continua en Azure
Amplíe la canalización con una fase de implementación que envíe el artefacto de compilación a una ranura de App Service, ejecute pruebas de humo y cambie a producción tras la aprobación.
Implementación continua en Azure es una lección gratuita de Cloud & IT Cert Prep en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cloud & IT Cert Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.
Qué es la implementación continua
La implementación continua (CD) publica automáticamente en producción cada cambio que supera las pruebas de CI, sin intervención manual. La entrega continua es una variante más flexible: automatiza la implementación hasta un entorno de staging y requiere la aprobación de una persona antes de pasar a producción. Ambas prácticas se basan en la misma infraestructura de canalización. En Azure Pipelines, la CD se implementa agregando fases de implementación después de la fase de CI, dirigidas a entornos de Azure con puertas de aprobación cuando sea necesario.
Canalización de varias fases: CI + CD
Una canalización de CI/CD completa tiene al menos tres fases: Build (compilar, probar y publicar el artefacto), Deploy to Staging (implementar el artefacto en un slot que no sea de producción) y Deploy to Production (intercambiar el slot o implementar después de la aprobación). Las fases transfieren el artefacto mediante el almacenamiento de artefactos de la canalización. La fase de staging ejecuta automáticamente pruebas de integración o de humo; la fase de producción espera la aprobación manual antes de continuar.
# azure-pipelines.yml: multi-stage CI/CD
trigger:
branches:
include: [main]
pool:
vmImage: ubuntu-latest
stages:
- stage: Build
jobs:
- job: BuildApp
steps:
- script: npm ci && npm run build
- task: PublishPipelineArtifact@1
inputs: {targetPath: dist, artifactName: webapp}
- stage: DeployStaging
dependsOn: Build
jobs:
- deployment: StagingDeploy
environment: Staging
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs: {appName: myapp-staging, package: '$(Pipeline.Workspace)/webapp'}
- stage: DeployProduction
dependsOn: DeployStaging
jobs:
- deployment: ProductionDeploy
environment: Production # Has manual approval gate
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs: {appName: myapp, package: '$(Pipeline.Workspace)/webapp'}Trabajos de implementación y entornos
Utilice trabajos deployment (no job normales) para las fases de implementación. Los trabajos de implementación admiten estrategias de implementación (runOnce, rolling y canary), realizan un seguimiento del historial de implementaciones por entorno y deben hacer referencia a los Entornos de Azure DevOps. Un entorno registra qué ejecuciones de canalización se han implementado en él, qué versión está activa actualmente y proporciona puertas de aprobación, comprobaciones y el estado de salud de los recursos en un único panel.
# Deployment job with rolling strategy
- job: RollingDeploy
strategy:
rolling:
maxParallel: 2 # Deploy to 2 targets at a time
preDeploy:
steps:
- script: echo 'Pre-deploy checks'
deploy:
steps:
- task: AzureWebApp@1
inputs:
appName: myapp
package: '$(Pipeline.Workspace)/webapp'
postRouteDeploy:
steps:
- script: curl -f https://myapp.azurewebsites.net/healthImplementación en Azure App Service
La tarea AzureWebApp@1 implementa una aplicación web en Azure App Service. Admite la implementación en un slot específico (por ejemplo, staging), así como de paquetes ZIP, imágenes de Docker o archivos JAR/WAR. Después de implementar en un slot de staging, utilice la tarea AzureAppServiceManage@0 para intercambiar el slot de staging con el de producción; este es el patrón de implementación preferido sin tiempo de inactividad para App Service.
# Deploy to staging slot, then swap to production
steps:
- task: AzureWebApp@1
displayName: 'Deploy to staging slot'
inputs:
azureSubscription: 'AzureProductionSC'
appType: webAppLinux
appName: myUniqueWebApp
deployToSlotOrASE: true
resourceGroupName: MyRG
slotName: staging
package: '$(Pipeline.Workspace)/webapp/app.zip'
runtimeStack: 'NODE|18-lts'
- task: AzureAppServiceManage@0
displayName: 'Swap staging into production'
inputs:
azureSubscription: 'AzureProductionSC'
action: Swap Slots
webAppName: myUniqueWebApp
resourceGroupName: MyRG
sourceSlot: stagingPruebas de humo en la canalización de CD
Después de implementar en staging, ejecute pruebas de humo: un conjunto mínimo de pruebas que verifica que la implementación se realizó correctamente y que la aplicación responde de forma adecuada. Normalmente, las pruebas de humo llaman a puntos de conexión de API clave y verifican los códigos de estado y el contenido de respuesta esperados. Si las pruebas de humo fallan, la canalización se detiene antes de intercambiar el slot con producción o solicitar aprobación, lo que evita que una versión defectuosa llegue a los usuarios.
# Smoke test step after staging deployment
- script: |
MAX_RETRY=10
COUNT=0
until curl -sf https://myUniqueWebApp-staging.azurewebsites.net/health; do
COUNT=$((COUNT+1))
if [ $COUNT -ge $MAX_RETRY ]; then
echo 'Health check failed after $MAX_RETRY attempts'
exit 1
fi
echo 'Waiting for app to start... attempt '$COUNT
sleep 10
done
echo 'App is healthy'
displayName: 'Smoke test: health endpoint'Puertas de aprobación del entorno
Agregue puertas de aprobación a los entornos de Azure DevOps para exigir una aprobación manual antes de continuar con las implementaciones. Vaya a la configuración del entorno y agregue aprobaciones; especifique los usuarios o grupos que deben aprobar. Cuando la canalización llega a un trabajo de implementación dirigido a ese entorno, se pausa y envía una notificación por correo electrónico. Los aprobadores pueden consultar los detalles de la implementación y aprobarla o rechazarla en el portal de Azure DevOps o mediante el vínculo del correo de notificación.
# Pipeline YAML: deployment to production environment
# (Approval configured in Azure DevOps portal on 'Production' environment)
- stage: DeployProduction
displayName: 'Deploy to Production'
dependsOn: DeployStaging
condition: succeeded('DeployStaging')
jobs:
- deployment: ProdDeploy
environment: Production # <-- Triggers approval gate configured in portal
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs:
appName: myapp-prod
package: '$(Pipeline.Workspace)/webapp/app.zip'Implementación en Azure Kubernetes Service
Implemente aplicaciones contenedorizadas en AKS mediante la tarea KubernetesManifest@0. Esta tarea aplica manifiestos YAML de Kubernetes al clúster e incluye compatibilidad integrada con imagePullSecrets e implementaciones canary. Conéctese al clúster de AKS mediante una conexión de servicio de Kubernetes configurada en Azure DevOps. Internamente, la tarea utiliza kubectl apply y espera a que finalice el despliegue antes de marcar el paso como correcto.
# AKS deployment step in Azure Pipelines
- task: KubernetesManifest@0
displayName: 'Deploy to AKS'
inputs:
action: deploy
kubernetesServiceConnection: 'AKS-Production-SC'
namespace: production
manifests: |
k8s/deployment.yaml
k8s/service.yaml
containers: 'mycontainerregistry.azurecr.io/myapp:$(Build.BuildId)'
imagePullSecrets: acr-secretEstrategia de etiquetado de imágenes
Etiquete las imágenes de contenedor con el identificador de compilación ($(Build.BuildId)) o el SHA de la confirmación de Git ($(Build.SourceVersion)) para poder rastrear siempre un contenedor en ejecución hasta la revisión exacta del código con la que se compiló. Evite utilizar la etiqueta latest en producción: Kubernetes la almacena en caché y es posible que no descargue la nueva versión. Almacene la etiqueta específica de la imagen como variable de canalización e inyéctela en los manifiestos de Kubernetes durante la implementación mediante envsubst o sed.
# Tag and push image with build ID in CI stage
- script: |
IMAGE='mycontainerregistry.azurecr.io/myapp'
TAG='$(Build.BuildId)'
docker build -t $IMAGE:$TAG -t $IMAGE:latest .
az acr login --name mycontainerregistry
docker push $IMAGE:$TAG
docker push $IMAGE:latest
echo "##vso[task.setvariable variable=imageTag;isOutput=true]$TAG"
name: BuildImage
displayName: 'Build and push container image'Estrategias de reversión
Defina una estrategia de reversión para las implementaciones en producción, de modo que pueda recuperarse rápidamente de una versión defectuosa. En App Service, la reversión consiste en volver a intercambiar el slot de producción con la versión de staging anterior. En AKS, use kubectl rollout undo. Cree un pipeline de reversión dedicado o agregue un trabajo de reversión manual que pueda activarse desde el portal de Azure DevOps. Documente el procedimiento de reversión y practíquelo con regularidad: una reversión que no se ha probado no es una reversión.
# Rollback job triggered manually
- job: Rollback
condition: and(failed(), eq(variables['Build.Reason'], 'Manual'))
steps:
# App Service rollback: swap production back to previous
- task: AzureAppServiceManage@0
inputs:
azureSubscription: 'AzureProductionSC'
action: Swap Slots
webAppName: myUniqueWebApp
resourceGroupName: MyRG
sourceSlot: production # Swap production back to staging version
targetSlot: stagingNotificaciones y supervisión de implementaciones
Después de cada implementación en producción, ejecute automáticamente una comprobación de supervisión para confirmar que la nueva versión funciona correctamente. Use la comprobación de pipeline AzureMonitor@1 para consultar las métricas de Azure Monitor. Si las tasas de error aumentan después de la implementación, bloquee la progresión del pipeline y active una reversión. Envíe notificaciones de implementación a Microsoft Teams o Slack mediante tareas de webhook, para que el equipo sepa cuándo finaliza una implementación y qué versión está activa.
# Send Teams notification on deployment completion
- task: InvokeRestAPI@1
displayName: 'Notify Teams channel'
inputs:
connectionType: connectedServiceName
serviceConnection: 'TeamsWebhookSC'
method: POST
body: '{
"text": "Deployed **$(Build.BuildId)** to Production. Committed by $(Build.RequestedFor). <br>View: https://myapp.contoso.com"
}'
waitForCompletion: falseProcedimientos recomendados de CD
Siga estos procedimientos recomendados de implementación continua: implemente con frecuencia (los lotes pequeños reducen el riesgo), use indicadores de características para desacoplar la implementación de la publicación, automatice todas las puertas de calidad antes de producción, practique con un entorno de staging similar a producción para que las diferencias no oculten errores, supervise las ventanas de implementación mediante comprobaciones de estado automatizadas y tenga siempre un plan de reversión probado. Un pipeline de CD maduro convierte la implementación en un evento rutinario, en lugar de una operación de alta tensión.
Comprobación rápida
Compruebe sus conocimientos sobre los conceptos de Microsoft Azure Fundamentals (AZ-900) de esta lección.
Resumen de la lección
En esta lección ha aprendido que los pipelines YAML de varias etapas encadenan las etapas de compilación, staging y producción mediante el intercambio de artefactos; los trabajos de implementación con Environments permiten establecer puertas de aprobación y realizar un seguimiento de las implementaciones; y las pruebas de humo después de la implementación en staging evitan que versiones defectuosas lleguen a producción. A continuación, exploraremos GitHub Actions en Azure.
Preguntas frecuentes
¿La lección «Implementación continua en Azure» es gratis?
Sí — el texto completo de «Implementación continua en Azure» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cloud & IT Cert Prep, actualiza a CoddyKit PRO. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.
¿Qué aprenderé en «Implementación continua en Azure»?
Amplíe la canalización con una fase de implementación que envíe el artefacto de compilación a una ranura de App Service, ejecute pruebas de humo y cambie a producción tras la aprobación. Practicas Cloud & IT Cert Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cloud & IT Cert Prep?
No se requiere experiencia previa. Cloud & IT Cert Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Implementación continua en Azure»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cloud & IT Cert Prep?
Sí. Cada lección de Cloud & IT Cert Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Introducción a Azure DevOps Services
- Creación de una canalización de CI con Azure Pipelines
- Implementación continua en Azure
- GitHub Actions en Azure