Integración de Azure DevOps
Instalar
Integra Capgo Actualizaciones en vivo con Azure DevOps Pipelines para que se desplieguen automáticamente las actualizaciones de tu aplicación cada vez que pulses code cambios. Esta guía cubre la configuración de compilaciones automatizadas, pruebas y flujos de trabajo de despliegue.
Requisitos previos
Sección titulada “Requisitos previos”Antes de configurar la integración de Azure DevOps, asegúrate de tener:
- Una organización y proyecto de Azure DevOps
- Una cuenta de Capgo con una aplicación configurada
- Your app’s source code in an Azure Repos Git repository
- Node.js y npm/yarn configurados en tu proyecto
Configuración de la Línea de Producción de Azure DevOps
Sección titulada “Configuración de la Línea de Producción de Azure DevOps”Paso 1: Crear Variables de Línea de Producción
Sección titulada “Paso 1: Crear Variables de Línea de Producción”Primero, configura las variables necesarias en tu proyecto de Azure DevOps:
- Navega a tu proyecto de Azure DevOps
- Ir a Pipelines → Biblioteca → Grupos de variables
- Crear un nuevo grupo de variables denominado
Capgo-Variables - Agregar las siguientes variables:
| Nombre de Variable | Valor | Seguro |
|---|---|---|
CAPGO_TOKEN | Su token Capgo API | ✅ Sí |
Configuración básica que despliega a producción en cada empuje a la rama principal:
# 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'Avanzado
Sección titulada “Avanzado”Despliegues de rama de características
Sección titulada “Despliegues de rama de características”Despliegue de ramas de características a canales de prueba para revisión y pruebas:
# 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 create $CHANNEL_NAME --apikey $(CAPGO_TOKEN) || true npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel $CHANNEL_NAME displayName: 'Deploy to Feature Channel'Usando la Cifrado
Título de la sección “Usando la Cifrado”Si está utilizando Capgo's característica de cifrado, necesitará almacenar su clave privada de manera segura en su entorno de CI/CD.
Después de configurar las claves de cifrado localmente, agregue su clave privada a las variables de Azure DevOps:
# Display your private key content (copy this output)cat .capgo_key_v2Agregue este contenido como CAPGO_PRIVATE_KEY en su grupo de variables de Azure DevOps (marque como secreto), luego utilícelo en flujos de trabajo:
# 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 de múltiples canales
Título de la sección “Configuración de múltiples canales”Para obtener información completa sobre la configuración y el manejo de múltiples canales de despliegue, consulte la documentación de canales.
Configuración completa con múltiples entornos y despliegues de solicitudes de extracción:
# 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 create $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 en múltiples entornos
Sección titulada “Despliegue en múltiples entornos”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)”Crear 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 basada en rama
Título de la sección “Estrategia de despliegue basada en rama”Configura diferentes 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)'Mejores prácticas de seguridad
Título de la sección “Mejores prácticas de seguridad”Gestión de variables seguras
Título de la sección “Gestión de variables seguras”- Utiliza grupos de variables: Almacena datos sensibles en grupos de variables de Azure DevOps
- Marcar como secreto: Siempre marca los tokens y claves API como variables secretas
- Acceso al alcance: Limita el acceso a grupos de variables a flujos de trabajo y usuarios específicos
- Rotar Claves: Rotar regularmente tus tokens Capgo y API
Monitoreo y Notificaciones
Sección titulada “Monitoreo y Notificaciones”Integración de Equipos
Sección titulada “Integración de Equipos”Agregar notificaciones de Microsoft Teams a tu flujo de trabajo:
- 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 Correo
Notificaciones por correo electrónicoConfigura notificaciones por correo electrónico para el estado de la implementación:
- 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 no encontrado”:
# 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 encontraron artefactos de compilación:
# List available artifacts for debugging- script: | ls -la $(System.ArtifactsDirectory) find $(System.ArtifactsDirectory) -name "*.js" -o -name "*.html" displayName: 'Debug artifacts'Pipeline de depuración
Sección titulada “Pipeline de depuración”Agregar 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'Pasos siguientes
Sección titulada “Pasos siguientes”- Aprender sobre Canales Aprender sobre los canales para gestionar diferentes entornos de despliegue
- Explorar Almacenamiento personalizado para escenarios de implementación avanzados
- Configuración Encriptación para implementaciones seguras
- Configurar Comportamiento de actualización para personalizar cómo se aplican las actualizaciones
Con la integración de Azure DevOps, puede automatizar sus Capgo implementaciones y garantizar actualizaciones consistentes y fiables para los usuarios de su aplicación móvil.
Siga adelante desde la integración de Azure DevOps
Título de la sección “Siga adelante desde la integración de Azure DevOps”Si está utilizando Integración de Azure DevOps para planificar la automatización de CI/CD, conectarlo con Capgo automatización de CI/CD para el flujo de trabajo del producto en Capgo automatización de CI/CD, Capgo compilaciones nativas para el flujo de trabajo del producto en Capgo compilaciones nativas, Capgo integraciones for the product workflow in Capgo Integrations, para el flujo de trabajo del producto en __CAPGO_KEEP_0__ integraciones, integración de CI/CD GitHub Actions Integration for the implementation detail in GitHub Actions Integration.