Creación de una canalización de CI con Azure Pipelines
Defina una canalización YAML que se active con solicitudes de incorporación de cambios, ejecute pruebas unitarias y produzca un artefacto de compilación; después, revise los resultados de las pruebas y la cobertura de código en el portal.
Creación de una canalización de CI con Azure Pipelines es una lección gratuita de Cloud & IT Cert Prep en CoddyKit. Esta es la lección 2 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 integración continua
La integración continua (CI) es la práctica de combinar con frecuencia los cambios de código en una rama compartida, de modo que cada combinación active automáticamente una compilación y una ejecución de pruebas. El objetivo es detectar pronto los errores de integración, antes de que se acumulen y se conviertan en problemas grandes y difíciles de solucionar. Una buena canalización de CI compila el código, ejecuta pruebas unitarias, mide la cobertura del código, realiza análisis estático y genera un artefacto implementable en unos minutos. Azure Pipelines proporciona el motor de automatización para esta práctica.
Estructura de una canalización YAML
Las canalizaciones de CI de Azure Pipelines se definen en un archivo azure-pipelines.yml ubicado en la raíz del repositorio. El archivo YAML especifica los desencadenadores (cuándo se ejecuta), un grupo de agentes (qué tipo de agente se utilizará) y una jerarquía de fases, trabajos y pasos. De forma predeterminada, las fases se ejecutan secuencialmente. Los trabajos de una fase se ejecutan en paralelo de forma predeterminada. Los pasos de un trabajo se ejecutan secuencialmente. Esta estructura proporciona un control detallado sobre el flujo de ejecución de la canalización.
# azure-pipelines.yml skeleton
trigger:
branches:
include:
- main
- 'feature/*'
paths:
exclude:
- docs/**
- '*.md'
pool:
vmImage: ubuntu-latest
variables:
buildConfiguration: Release
nodeVersion: '18.x'
stages:
- stage: CI
displayName: 'Build and Test'
jobs:
- job: Build
displayName: 'Build Application'
steps: []Configuración de desencadenadores
Azure Pipelines admite varios tipos de desencadenadores. Los desencadenadores de rama ejecutan la canalización cuando se inserta código en ramas especificadas. Los desencadenadores de solicitudes de incorporación de cambios (desencadenadores de PR) se ejecutan cuando se abre o actualiza una PR dirigida a ramas de destino; son esenciales para validar el código antes de combinarlo. Los desencadenadores programados se ejecutan a una hora fija (por ejemplo, compilaciones nocturnas). Los desencadenadores de canalización encadenan varias canalizaciones. Especifique trigger: none para deshabilitar las ejecuciones automáticas y permitir únicamente la ejecución manual.
# Branch trigger
trigger:
branches:
include: [main, develop]
# Pull request trigger
pr:
branches:
include: [main]
autoCancel: true # Cancel previous runs when PR is updated
# Scheduled trigger (nightly build at 02:00 UTC)
schedules:
- cron: '0 2 * * *'
displayName: 'Nightly Build'
branches:
include: [main]
always: true # Run even if no new commitsPasos: scripts y tareas
Los pasos de una canalización son scripts (comandos de bash o PowerShell) o tasks (unidades precompiladas y parametrizadas del marketplace de Azure DevOps). Las tareas como NodeTool@0, DotNetCoreCLI@2 y Maven@3 encapsulan operaciones de compilación habituales. Utilice displayName en cada paso para que los registros de la canalización sean fáciles de leer. Cada paso se ejecuta en secuencia y la canalización produce un error si algún paso termina con un código distinto de cero, a menos que establezca continueOnError: true.
steps:
- task: NodeTool@0
displayName: 'Install Node.js 18'
inputs:
versionSpec: '18.x'
- script: npm ci
displayName: 'Install dependencies (clean install)'
- script: npm run lint
displayName: 'Run ESLint'
- script: npm run build
displayName: 'Build production bundle'
- script: npm test -- --ci --coverage
displayName: 'Run unit tests with coverage'Publicación de resultados de pruebas
Después de ejecutar las pruebas, publique los resultados en Azure DevOps mediante la tarea PublishTestResults. Azure Pipelines analiza archivos de resultados de JUnit, NUnit, XUnit o VSTest y muestra en la interfaz de usuario de la ejecución de la canalización el número de pruebas aprobadas y fallidas, la duración de la ejecución y los detalles de cada prueba. El historial de pruebas se registra a lo largo del tiempo, lo que permite detectar pruebas inestables y regresiones. Esto es esencial para que todo el equipo tenga visibilidad de la calidad del código.
# Example: Node.js project with Jest tests
steps:
- script: npm test -- --ci --reporters=jest-junit
displayName: 'Run tests with JUnit reporter'
env:
JEST_JUNIT_OUTPUT_DIR: '$(Agent.TempDirectory)/test-results'
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: JUnit
testResultsFiles: '$(Agent.TempDirectory)/test-results/**/*.xml'
condition: succeededOrFailed() # Publish even if tests failPublicación de la cobertura del código
Publique informes de cobertura del código para que Azure Pipelines muestre los porcentajes y las tendencias de cobertura en la interfaz de usuario de la canalización. La tarea PublishCodeCoverageResults acepta informes en formato Cobertura o JaCoCo. Combine esta función con puertas de cobertura de ramas: configure un umbral mínimo de cobertura y haga que la compilación falle si la cobertura cae por debajo de él. Las tendencias de cobertura ayudan a identificar cuándo se agrega código nuevo sin las pruebas correspondientes.
# Jest + coverage
- script: npm test -- --ci --coverage --coverageReporters=cobertura
displayName: 'Run tests with coverage'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/coverage'Variables y grupos de variables de la canalización
Almacene la configuración de la canalización en variables definidas en el nivel de canalización, fase o trabajo en YAML. Para valores confidenciales (claves de API y contraseñas), utilice variables secretas; establézcalas en la biblioteca de canalizaciones (interfaz de usuario) o en grupos de variables y haga referencia a ellas en YAML. Los grupos de variables son colecciones reutilizables de variables compartidas entre varias canalizaciones. Vincule un grupo de variables a Azure Key Vault para sincronizar automáticamente los secretos de Key Vault con las variables de la canalización.
# Reference a variable group in a pipeline
variables:
- group: 'Production-Secrets' # Linked to Azure Key Vault
- name: buildConfiguration
value: Release
# Use a variable
steps:
- script: echo 'Building $(buildConfiguration) configuration'
- script: az webapp deploy --src-path drop.zip
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID) # From Key Vault
APP_API_KEY: $(APP_API_KEY) # Secret, not printed in logsArtefactos: empaquetado de la salida de compilación
Después de una compilación correcta, empaquete la salida en un artefacto de canalización para que las fases posteriores, como la implementación, puedan acceder a ella. Utilice PublishPipelineArtifact para cargar archivos del agente de compilación al almacenamiento de artefactos de Azure DevOps. En una fase o un trabajo posterior, utilice DownloadPipelineArtifact para recuperar el artefacto. Esto desacopla el trabajo de compilación de los trabajos de implementación, que pueden ejecutarse en agentes diferentes o en fases distintas.
# Publish build artifact
- task: PublishPipelineArtifact@1
displayName: 'Publish build artifact'
inputs:
targetPath: '$(System.DefaultWorkingDirectory)/dist'
artifactName: webapp-drop
publishLocation: pipeline
# In a later deployment job, download the artifact
- task: DownloadPipelineArtifact@2
inputs:
artifactName: webapp-drop
targetPath: '$(Pipeline.Workspace)/drop'
- script: ls -la $(Pipeline.Workspace)/dropTrabajos en paralelo para compilaciones más rápidas
Ejecute tareas independientes en paralelo definiendo varios trabajos dentro de una fase. Por ejemplo, ejecute simultáneamente las pruebas unitarias y el análisis de seguridad en lugar de hacerlo secuencialmente. Los trabajos en paralelo requieren minutos de compilación independientes, pero pueden reducir considerablemente la duración total de la canalización. Utilice la propiedad dependsOn para hacer que un trabajo espere a que finalicen uno o varios trabajos antes de iniciarse, creando un grafo de dependencias dentro de una fase.
stages:
- stage: CI
jobs:
- job: UnitTests
displayName: 'Run unit tests'
steps:
- script: npm test
- job: LintAndSecurity
displayName: 'Lint and security scan'
steps:
- script: npm run lint
- script: npm audit --audit-level=high
- job: BuildArtifact
displayName: 'Build and publish artifact'
dependsOn: [UnitTests, LintAndSecurity]
condition: succeeded('UnitTests') and succeeded('LintAndSecurity')
steps:
- script: npm run buildValidación de compilaciones con directivas de rama
Vincule su canalización de CI a una directiva de rama en Azure Repos para que se ejecute automáticamente como una comprobación de validación de compilación en las solicitudes de incorporación de cambios dirigidas a main. La combinación queda bloqueada hasta que la canalización finaliza correctamente. Combine varias comprobaciones: la canalización de CI debe completarse correctamente, al menos 2 revisores deben aprobarla, todos los comentarios deben estar resueltos y debe existir un elemento de trabajo vinculado. Esto crea una puerta de calidad que impide combinar código defectuoso en la rama principal.
# Add build validation via CLI
az repos policy build create \
--blocking true \
--branch main \
--branch-match-type exact \
--build-definition-id <pipeline-id> \
--display-name 'CI Build Validation' \
--enabled true \
--project MyProject \
--repository-id <repo-id> \
--queue-on-source-update-only true \
--manual-queue-only false \
--valid-duration 720 # Pipeline result expires after 12 hoursLectura de los resultados de una ejecución de canalización
Cuando finalice una ejecución de canalización, revise los resultados en el portal de Azure DevOps. La pestaña Summary muestra el resultado general, correcto o fallido, y la duración. La pestaña Tests enumera todos los resultados de las pruebas y permite filtrarlos por resultado. La pestaña Code Coverage muestra el porcentaje de cobertura y resalta las líneas no cubiertas. Haga clic en cualquier trabajo para ver el resultado del registro paso a paso. Las canalizaciones fallidas muestran el paso que produjo el error resaltado en rojo, junto con el resultado completo del error para facilitar el diagnóstico.
# View pipeline run results via CLI
az pipelines runs list \
--pipeline-ids <pipeline-id> \
--project MyProject \
--query '[].{id:id, status:status, result:result, startTime:startTime}' \
-o table
# View logs from a specific run
az pipelines runs logs list \
--run-id <run-id> \
--project MyProjectComprobació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 Azure Pipelines YAML define canalizaciones de CI con fases, trabajos y pasos para compilar, probar y crear artefactos; que los desencadenadores de PR y las directivas de rama aplican puertas de calidad que bloquean la combinación de código defectuoso; y que las tareas PublishTestResults y PublishCodeCoverageResults hacen visible la calidad de las pruebas para todo el equipo. A continuación, exploraremos la implementación continua en Azure.
Preguntas frecuentes
¿La lección «Creación de una canalización de CI con Azure Pipelines» es gratis?
Sí — el texto completo de «Creación de una canalización de CI con Azure Pipelines» 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 «Creación de una canalización de CI con Azure Pipelines»?
Defina una canalización YAML que se active con solicitudes de incorporación de cambios, ejecute pruebas unitarias y produzca un artefacto de compilación; después, revise los resultados de las pruebas… 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 2 de 4.
¿Cuánto tiempo toma la lección «Creación de una canalización de CI con Azure Pipelines»?
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