0Pricing
Azure Fundamentals · Lección

Flujo de trabajo del desarrollador de principio a fin

Conecte GitHub Actions CI/CD, Azure Container Registry, Container Apps y Application Insights en un ciclo interno completo del desarrollador, desde el commit hasta una producción observable.

Flujo de trabajo del desarrollador de principio a fin es una lección gratuita de Azure Fundamentals en CoddyKit. Esta es la lección 4 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 Azure Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Azure Fundamentals incluye 4 lecciones en total.

El ciclo moderno de desarrollo en Azure

Un flujo de trabajo moderno de desarrollo en Azure conecta el control de código fuente, CI/CD, la infraestructura de contenedores y la observabilidad en un ciclo interno fluido, desde la confirmación del código hasta una producción observable. Sus componentes principales son: GitHub (código fuente), GitHub Actions (canalización de compilación y implementación), Azure Container Registry (almacén de imágenes), Azure Container Apps (entorno de ejecución) y Application Insights (observabilidad). Cada cambio pasa automáticamente del portátil del desarrollador a producción en cuestión de minutos, con controles de calidad en cada paso.

Paso 1: control de código fuente y estrategia de ramas

Organice su código en un repositorio de GitHub utilizando una estrategia de desarrollo basado en tronco o de ramificación GitFlow. Para la mayoría de los microservicios, el desarrollo basado en tronco (ramas de funcionalidad de corta duración que se combinan diariamente con main) reduce los conflictos de integración y mantiene la canalización sencilla. Use reglas de protección de ramas en main para exigir revisiones de solicitudes de incorporación de cambios y comprobaciones de CI correctas antes de combinar los cambios. Un archivo CODEOWNERS garantiza que los cambios en servicios críticos requieran la aprobación de los ingenieros sénior del equipo correspondiente.

# Example .github/CODEOWNERS
# Require payments-team review for any changes under /src/payments/
/src/payments/ @payments-team
/infrastructure/   @platform-team

Paso 2: CI con GitHub Actions

La canalización de CI se ejecuta en cada solicitud de incorporación de cambios. Un flujo de trabajo habitual es: extraer el código → restaurar las dependencias → ejecutar pruebas unitarias → ejecutar pruebas de integración → compilar la imagen de Docker → insertar la imagen en Azure Container Registry. La imagen se etiqueta con el SHA de la confirmación de git para facilitar la trazabilidad. Use autenticación basada en OIDC desde GitHub Actions a Azure (mediante identidad federada) para evitar almacenar secretos de entidades de servicio de Azure en GitHub; es el equivalente de una identidad administrada para las canalizaciones de CI.

# .github/workflows/ci.yml (abbreviated)
name: CI
on: [pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Login to ACR
        uses: azure/docker-login@v1
        with:
          login-server: myacr.azurecr.io
          username: ${{ secrets.AZURE_CLIENT_ID }}
          password: ${{ secrets.AZURE_CLIENT_SECRET }}
      - name: Build and push image
        run: |
          docker build -t myacr.azurecr.io/myapi:${{ github.sha }} .
          docker push myacr.azurecr.io/myapi:${{ github.sha }}

Paso 3: CD a pruebas

Después de que la canalización de CI se complete correctamente al combinar cambios en main, la canalización de CD implementa automáticamente en el entorno de pruebas. La canalización actualiza la etiqueta de imagen de Container App con el SHA recién compilado, espera a que la nueva revisión esté en buen estado y ejecuta pruebas de humo en la URL del entorno de pruebas. Las pruebas de humo verifican que los puntos de conexión críticos de la API devuelvan las respuestas esperadas. Si las pruebas de humo fallan, la canalización revierte el cambio dirigiendo de nuevo el tráfico de entrada a la revisión anterior, sin intervención manual.

# CD stage: update Container App to new image
- name: Deploy to staging
  uses: azure/cli@v2
  with:
    azcliversion: latest
    inlineScript: |
      az containerapp update \
        --name myapi-staging \
        --resource-group myRG \
        --image myacr.azurecr.io/myapi:${{ github.sha }}

- name: Run smoke tests
  run: |
    STAGING_URL=$(az containerapp show --name myapi-staging \
      --resource-group myRG \
      --query 'properties.configuration.ingress.fqdn' -o tsv)
    curl -f https://$STAGING_URL/health || exit 1

Paso 4: puerta de aprobación para producción

Después de validar el entorno de pruebas, la canalización de CD se detiene en una puerta de aprobación. Las protecciones de entorno de GitHub Actions permiten configurar revisores obligatorios para el entorno de production. La canalización envía una notificación de Slack al ingeniero de guardia, quien revisa los resultados de las pruebas del entorno de pruebas, las diferencias y cualquier incidente abierto antes de aprobar. Solo después de la aprobación, la canalización continúa para implementar en producción la misma imagen identificada por el SHA. Este paso con intervención humana es fundamental para servicios con mucho tráfico o regulados.

# In GitHub: create 'production' environment with required reviewers
# .github/workflows/cd.yml (abbreviated)
jobs:
  deploy-production:
    environment:
      name: production
      url: https://myapi.contoso.com
    needs: deploy-staging
    steps:
      - name: Deploy to production
        uses: azure/cli@v2
        with:
          inlineScript: |
            az containerapp update \
              --name myapi \
              --resource-group myRG \
              --image myacr.azurecr.io/myapi:${{ github.sha }}

Paso 5: observabilidad en producción

Una vez realizada la implementación en producción, Application Insights proporciona visibilidad en tiempo real. El SDK de App Insights (o la instrumentación automática para los entornos de ejecución compatibles) realiza un seguimiento de: tasas de solicitudes, tasas de errores y latencia (las tres señales doradas), llamadas a dependencias (a bases de datos, Service Bus y otras API) y excepciones con seguimientos de pila completos. El Mapa de aplicación visualiza cómo se llaman los servicios entre sí y resalta qué dependencias contribuyen más a los errores o a la latencia.

# Python: Add Application Insights SDK
from opencensus.ext.azure.log_exporter import AzureLogHandler
from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace.tracer import Tracer

tracer = Tracer(
  exporter=AzureExporter(connection_string='InstrumentationKey=<key>'),
  sampler=ProbabilitySampler(1.0)
)

Conexión de las implementaciones con los seguimientos

Use Application Insights Annotations para marcar los eventos de implementación en los gráficos de métricas. Cuando se crea una anotación de versión (mediante la acción azure/appinsights-annotation de GitHub Actions), aparece como una línea vertical en todos los gráficos de métricas de App Insights. Esto permite comprobar de inmediato si un aumento de la latencia o de la tasa de errores se correlaciona con una implementación reciente, lo que reduce considerablemente el tiempo medio de diagnóstico (MTTD) durante los incidentes.

# Create a release annotation in Application Insights
- name: Annotate release in App Insights
  uses: azure/appinsights-annotation@v1
  with:
    appInsightsResourceName: myAppInsights
    resourceGroupName: myRG
    releaseName: '${{ github.run_id }}-${{ github.sha }}'

Reversión automática ante un aumento de la tasa de errores

Para las canalizaciones más resilientes, implemente una reversión automática. Después de la implementación en producción, la canalización espera 10 minutos y consulta Application Insights para obtener la tasa de errores. Si la tasa de errores supera un umbral configurable (por ejemplo, >5 %), la canalización revierte automáticamente el cambio actualizando el tráfico de entrada de Container App para dirigir el 100 % a la revisión anterior. Este patrón de entrega progresiva reduce el alcance de una implementación defectuosa y permite a los equipos implementar con confianza incluso cambios complejos o delicados.

# Query App Insights error rate via REST (abbreviated)
QUERY='requests | where timestamp > ago(10m) | summarize failed = countif(success == false), total = count() | extend errorRate = round(100.0 * failed / total, 2)'
RESULT=$(az monitor app-insights query \
  --apps myAppInsights \
  --resource-group myRG \
  --analytics-query "$QUERY" \
  --query 'tables[0].rows[0][2]' -o tsv)
if [ $(echo '$RESULT > 5' | bc -l) -eq 1 ]; then
  echo 'Error rate $RESULT% - rolling back!'
  az containerapp ingress traffic set --name myapi --resource-group myRG --revision-weight stable=100
fi

Productividad del desarrollador: desarrollo local con emuladores

Los desarrolladores deben poder ejecutar y probar localmente toda la pila sin conectarse a recursos de producción de Azure. Use Azure Storage Emulator (Azurite) para el almacenamiento local de blobs y colas, Cosmos DB Emulator para probar la base de datos local y Service Bus Emulator para la mensajería local. La variable de entorno AZURE_ENVIRONMENT=local puede cambiar DefaultAzureCredential para que use cadenas de conexión que apunten a los emuladores, mientras que el mismo código utiliza una identidad administrada en Azure. Docker Compose orquesta todas las dependencias locales mediante un único comando docker compose up.

# docker-compose.yml for local development
services:
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    ports:
      - '10000:10000'
      - '10001:10001'
  cosmos-emulator:
    image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
    ports:
      - '8081:8081'

Seguridad en el flujo de trabajo de desarrollo

Integre la seguridad en cada etapa del flujo de trabajo de desarrollo: Dependabot busca dependencias vulnerables en las solicitudes de incorporación de cambios; GitHub Advanced Security (análisis de código con CodeQL) detecta vulnerabilidades como la inyección de SQL y secretos codificados de forma fija; Microsoft Defender for DevOps se integra con GitHub para mostrar recomendaciones de seguridad de Azure junto a los cambios de código; y el análisis de vulnerabilidades de ACR Defender comprueba las imágenes de contenedor en busca de CVE del sistema operativo y de la capa de aplicación después de cada inserción. Los hallazgos de seguridad aparecen como comentarios en las solicitudes de incorporación de cambios, por lo que pueden abordarse antes de combinar los cambios.

Integración de todos los elementos

El flujo de trabajo de desarrollo completo es un bucle de retroalimentación continua: un desarrollador confirma el código, CI compila y prueba la imagen del contenedor, la imagen se inserta en ACR con el SHA de la confirmación como etiqueta, CD implementa en el entorno de pruebas y ejecuta pruebas de humo, una persona aprueba la implementación en producción, la canalización implementa en producción y crea una anotación de versión, y Application Insights supervisa las tasas de errores con una reversión automática si se superan los umbrales. La infraestructura como código (Bicep o Terraform) en el mismo repositorio garantiza que la canalización, Container App y la configuración de supervisión estén controladas por versiones junto con el código de la aplicación.

Comprobación rápida

Compruebe su comprensión de los conceptos de Microsoft Azure Fundamentals (AZ-900) tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido que el flujo de trabajo de desarrollo de extremo a extremo conecta el control de código fuente de GitHub, CI/CD de GitHub Actions, Azure Container Registry, Container Apps y Application Insights; las anotaciones de versión correlacionan las implementaciones con los cambios en las métricas para diagnosticar más rápidamente los incidentes; y la reversión automática basada en consultas de la tasa de errores reduce el alcance de las implementaciones defectuosas. A continuación, pasaremos a la preparación del examen con un repaso completo de los conceptos de nube y la arquitectura de Azure.

Preguntas frecuentes

¿La lección «Flujo de trabajo del desarrollador de principio a fin» es gratis?

Sí — el texto completo de «Flujo de trabajo del desarrollador de principio a fin» 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 Azure Fundamentals, actualiza a CoddyKit PRO. El curso de Azure Fundamentals incluye 4 lecciones en total.

¿Qué aprenderé en «Flujo de trabajo del desarrollador de principio a fin»?

Conecte GitHub Actions CI/CD, Azure Container Registry, Container Apps y Application Insights en un ciclo interno completo del desarrollador, desde el commit hasta una producción observable. Practicas Azure Fundamentals 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 Azure Fundamentals?

No se requiere experiencia previa. Azure Fundamentals 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 4 de 4.

¿Cuánto tiempo toma la lección «Flujo de trabajo del desarrollador de principio a fin»?

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 Azure Fundamentals?

Sí. Cada lección de Azure Fundamentals 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

  1. Identidad administrada para autenticación sin contraseñas
  2. Azure Service Bus para mensajería desacoplada
  3. Azure Container Apps
  4. Flujo de trabajo del desarrollador de principio a fin
← Volver a Azure Fundamentals