Integración con Azure DevOps
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Integra Capgo Live Updates con Azure DevOps Pipelines para desplegar automáticamente las actualizaciones de tu app cada vez que hagas push de cambios en code. Esta guía cubre la configuración de builds, pruebas y workflows de despliegue automatizados.
Requisitos
Sección titulada “Requisitos previos”Antes de configurar la integración con Azure DevOps, asegúrate de tener:
- Una organización y un proyecto de Azure DevOps
- Una cuenta de Capgo con una app configurada
- El code fuente de tu app en un repositorio Git de Azure Repos
- Node.js y npm/yarn configurados en tu proyecto
Configuración del pipeline de Azure DevOps
Sección titulada “Configuración del pipeline de Azure DevOps”Paso 1: Crear variables del pipeline
Sección titulada “Paso 1: Crear variables del pipeline”Primero, configura las variables necesarias en tu proyecto de Azure DevOps:
- Ve a tu proyecto de Azure DevOps
- Ve a Pipelines → Librería → Grupos de variables
- Crea un nuevo grupo de variables llamado
Capgo-Variables - Añade las siguientes variables:
| Nombre de la variable | Valor | Seguro |
|---|---|---|
CAPGO_TOKEN | Tu token Capgo API | ✅ Sí |
Configuración básica que despliega a producción con cada push a la rama main:
# Simple Azure DevOps Pipeline for Capgo Live Updatestrigger: branches: include: - main
variables: - group: Capgo-Variables
jobs: - job: BuildAndDeploy displayName: 'Build and Deploy to Capgo' pool: vmImage: 'ubuntu-latest'
steps: - task: NodeTool@0 displayName: 'Setup Node.js' inputs: versionSpec: '22.x'
- script: | npm ci npm run test npm run build displayName: 'Install, test and build'
- script: | npm install -g @capgo/cli npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel production displayName: 'Deploy to Capgo'Advanced
Sección titulada “Advanced”Despliegues de Feature Branches
Sección titulada “Despliegues de Feature Branches”Despliega feature branches a canales de prueba para revisión y testing:
# Feature branch deploymenttrigger: branches: include: - feature/*
variables: - group: Capgo-Variables
jobs: - job: DeployFeature displayName: 'Deploy Feature Branch' pool: vmImage: 'ubuntu-latest' condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/')
steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- script: | npm ci npm run test npm run build displayName: 'Install, test and build'
- script: | BRANCH_NAME=$(echo "$(Build.SourceBranchName)" | sed 's/[^a-zA-Z0-9-]/-/g') CHANNEL_NAME="feature-$BRANCH_NAME" npm install -g @capgo/cli npx @capgo/cli channel add $CHANNEL_NAME --apikey $(CAPGO_TOKEN) || true npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel $CHANNEL_NAME displayName: 'Deploy to Feature Channel'Uso de cifrado
Sección titulada “Uso de cifrado”Si estás usando La función de cifrado de Capgo, deberás guardar tu clave privada de forma segura en tu entorno de CI/CD.
Después de configuración de las claves de cifrado localmente, añade tu clave privada a las variables de Azure DevOps:
# Display your private key content (copy this output)cat .capgo_key_v2Añade este contenido como CAPGO_PRIVATE_KEY en tu grupo de variables de Azure DevOps (márcalo como secret), y luego úsalo en tus pipelines:
# Deploy with encryption- script: | npm install -g @capgo/cli npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --key-data-v2 "$(CAPGO_PRIVATE_KEY)" --channel production displayName: 'Deploy to Capgo with Encryption'Configuración multicanal
Sección titulada “Configuración multicanal”Para obtener información completa sobre cómo configurar y gestionar varios canales de despliegue, consulta la documentación de canales.
Configuración completa con múltiples entornos y despliegues por pull request:
# Advanced Azure DevOps Pipeline with Multiple Channelstrigger: branches: include: - main - develop
pr: branches: include: - main - develop
variables: - group: Capgo-Variables
stages: # Build stage - stage: Build jobs: - job: BuildApp pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- script: | npm ci npm run test npm run build displayName: 'Install, test and build'
- task: PublishBuildArtifacts@1 inputs: pathToPublish: 'dist' artifactName: 'app-build'
# Deploy to development - stage: DeployDev condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop')) jobs: - deployment: DeployDevelopment environment: development pool: vmImage: 'ubuntu-latest' strategy: runOnce: deploy: steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- task: DownloadBuildArtifacts@0 inputs: artifactName: 'app-build' downloadPath: '$(Pipeline.Workspace)'
- script: | npm install -g @capgo/cli npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel development --path $(Pipeline.Workspace)/app-build displayName: 'Deploy to Development'
# Deploy PR to test channel - stage: DeployPR condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) jobs: - job: DeployPRChannel pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- task: DownloadBuildArtifacts@0 inputs: artifactName: 'app-build' downloadPath: '$(Pipeline.Workspace)'
- script: | CHANNEL_NAME="pr-$(System.PullRequest.PullRequestNumber)" npm install -g @capgo/cli npx @capgo/cli channel add $CHANNEL_NAME --apikey $(CAPGO_TOKEN) || true npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel $CHANNEL_NAME --path $(Pipeline.Workspace)/app-build displayName: 'Deploy to PR Channel'
# Deploy to production - stage: DeployProd condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) jobs: - deployment: DeployProduction environment: production pool: vmImage: 'ubuntu-latest' strategy: runOnce: deploy: steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- task: DownloadBuildArtifacts@0 inputs: artifactName: 'app-build' downloadPath: '$(Pipeline.Workspace)'
- script: | npm install -g @capgo/cli npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel production --path $(Pipeline.Workspace)/app-build displayName: 'Deploy to Production'Despliegue multi-entorno
Sección titulada “Despliegue multi-entorno”Para escenarios complejos con múltiples entornos:
# Extended pipeline with multiple environmentsparameters: - name: deployEnvironment displayName: 'Deploy Environment' type: string default: 'staging' values: - staging - production
variables: - group: Capgo-Variables - name: channelName ${{ if eq(parameters.deployEnvironment, 'production') }}: value: 'production' ${{ else }}: value: 'staging'
stages: # Build stage - stage: Build jobs: - job: BuildApp pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- script: | npm ci npm run test npm run build displayName: 'Install, test and build'
- task: PublishBuildArtifacts@1 inputs: pathToPublish: 'dist' artifactName: 'app-build'
- stage: DeployStaging displayName: 'Deploy to Staging' dependsOn: Build condition: and(succeeded(), eq('${{ parameters.deployEnvironment }}', 'staging')) jobs: - deployment: DeployStaging displayName: 'Deploy to Staging Channel' pool: vmImage: 'ubuntu-latest' environment: 'staging' strategy: runOnce: deploy: steps: - template: deploy-steps.yml parameters: channel: 'staging'
- stage: DeployProduction displayName: 'Deploy to Production' dependsOn: Build condition: and(succeeded(), eq('${{ parameters.deployEnvironment }}', 'production')) jobs: - deployment: DeployProduction displayName: 'Deploy to Production Channel' pool: vmImage: 'ubuntu-latest' environment: 'production' strategy: runOnce: deploy: steps: - template: deploy-steps.yml parameters: channel: 'production'Plantilla de despliegue (deploy-steps.yml)
Sección titulada “Plantilla de despliegue (deploy-steps.yml)”Crea un archivo de plantilla reutilizable deploy-steps.yml:
parameters: - name: channel type: string
steps: - task: NodeTool@0 displayName: 'Install Node.js' inputs: versionSpec: '22.x'
- task: DownloadBuildArtifacts@0 displayName: 'Download build artifacts' inputs: artifactName: 'app-build' downloadPath: '$(System.ArtifactsDirectory)'
- script: | npm install -g @capgo/cli displayName: 'Install Capgo CLI'
- script: | npx @capgo/cli bundle upload \ --apikey $(CAPGO_TOKEN) \ --channel ${{ parameters.channel }} \ --path $(System.ArtifactsDirectory)/app-build displayName: 'Upload to Capgo (${{ parameters.channel }})'Estrategia de despliegue por ramas
Sección titulada “Estrategia de despliegue por ramas”Configura distintas estrategias de despliegue según las ramas de Git:
trigger: branches: include: - main - develop - feature/*
variables: - group: Capgo-Variables - name: targetChannel ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: value: 'production' ${{ elseif eq(variables['Build.SourceBranch'], 'refs/heads/develop') }}: value: 'staging' ${{ else }}: value: 'development'
stages: - stage: Build jobs: - job: BuildApp pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '22.x'
- script: | npm ci npm run test npm run build displayName: 'Install, test and build'
- task: PublishBuildArtifacts@1 inputs: pathToPublish: 'dist' artifactName: 'app-build'
- stage: Deploy displayName: 'Deploy to $(targetChannel)' dependsOn: Build condition: succeeded() jobs: - deployment: DeployJob displayName: 'Deploy to $(targetChannel) Channel' pool: vmImage: 'ubuntu-latest' environment: '$(targetChannel)' strategy: runOnce: deploy: steps: - template: deploy-steps.yml parameters: channel: '$(targetChannel)'Buenas prácticas de seguridad
Sección titulada “Buenas prácticas de seguridad”Gestión segura de variables
Sección titulada “Gestión segura de variables”- Usar grupos de variables: Almacena datos sensibles en grupos de variables de Azure DevOps
- Marcar como secreto: Marca siempre los tokens y claves de API como variables secretas
- Limitar el acceso: Limita acceso a grupos de variables a pipelines y usuarios específicos
- Rotar claves: Rota regularmente tus tokens de Capgo API
Monitoreo y notificaciones
Sección titulada “Monitoreo y notificaciones”Integración con Teams
Sección titulada “Integración con Teams”Añade notificaciones de Microsoft Teams a tu pipeline:
- task: ms-teams-deploy-card@1.4.1 displayName: 'Notify Teams on Success' condition: succeeded() inputs: webhookUri: '$(TEAMS_WEBHOOK_URL)' title: 'Capgo Deployment Successful' text: 'App deployed to $(targetChannel) channel' themeColor: '00FF00'
- task: ms-teams-deploy-card@1.4.1 displayName: 'Notify Teams on Failure' condition: failed() inputs: webhookUri: '$(TEAMS_WEBHOOK_URL)' title: 'Capgo Deployment Failed' text: 'Deployment to $(targetChannel) failed' themeColor: 'FF0000'Notificaciones por email
Sección titulada “Notificaciones por email”Configura notificaciones por email para el estado del despliegue:
- task: EmailReport@1 displayName: 'Send Email Report' condition: always() inputs: sendMailConditionConfig: 'Always' subject: 'Capgo Deployment Report - $(Build.BuildNumber)' to: 'team@yourcompany.com' body: | Deployment Status: $(Agent.JobStatus) Channel: $(targetChannel) Build: $(Build.BuildNumber) Commit: $(Build.SourceVersion)Solución de problemas
Sección titulada “Solución de problemas”Problemas comunes
Sección titulada “Problemas comunes”El pipeline falla con “Capgo CLI not found”:
# Ensure global installation- script: | npm install -g @capgo/cli which capgo || echo "Capgo CLI not found in PATH" displayName: 'Install and verify Capgo CLI'Errores de autenticación:
# Verify token is correctly set- script: | echo "Token length: ${#CAPGO_TOKEN}" if [ -z "$CAPGO_TOKEN" ]; then echo "CAPGO_TOKEN is not set" exit 1 fi displayName: 'Verify Capgo token' env: CAPGO_TOKEN: $(CAPGO_TOKEN)No se encuentran los artifacts del build:
# List available artifacts for debugging- script: | ls -la $(System.ArtifactsDirectory) find $(System.ArtifactsDirectory) -name "*.js" -o -name "*.html" displayName: 'Debug artifacts'Pipeline de debug
Sección titulada “Debug Pipeline”Añade pasos de depuración para solucionar problemas:
- script: | echo "Build.SourceBranch: $(Build.SourceBranch)" echo "Build.BuildNumber: $(Build.BuildNumber)" echo "Target Channel: $(targetChannel)" displayName: 'Debug Pipeline Variables'
- script: | npx @capgo/cli app debug --apikey $(CAPGO_TOKEN) displayName: 'Debug Capgo App Status'Próximos pasos
Sección titulada “Próximos pasos”- Aprende sobre Canales para gestionar distintos entornos de despliegue
- Explorar Almacenamiento personalizado para escenarios de despliegue avanzados
- Configurar Cifrado para despliegues seguros
- Configurar Comportamiento de actualización para personalizar cómo se aplican las actualizaciones
Con la integración de Azure DevOps, puedes automatizar tus despliegues de Capgo y garantizar actualizaciones consistentes y fiables para tus usuarios.
Continúa desde la integración de Azure DevOps
Sección titulada “Continúa con la integración de Azure DevOps”Si estás usando Integración con Azure DevOps para planificar la automatización de CI/CD, conéctala con CI/CD de Capgo para el workflow del producto en Capgo CI/CD, Native Builds de Capgo para el workflow del producto en Capgo Native Builds, Integraciones de Capgo para el workflow del producto en las integraciones de Capgo, Integración CI/CD para el detalle de implementación en la integración de CI/CD, y Integración con GitHub Actions por el detalle de implementación en la integración de GitHub Actions.