Integrazione con Azure DevOps
Copiare un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Integrate Capgo Live Updates with Azure DevOps Pipelines to automatically deploy your app updates whenever you push code changes. This guide covers setting up automated builds, testing, and deployment workflows.
Requisiti preliminari
Sezione intitolata “Requisiti”Prima di configurare l'integrazione con Azure DevOps, assicurati di avere:
- Un'organizzazione e un progetto di Azure DevOps
- Un account Capgo con un'app configurata
- Your app’s source code in an Azure Repos Git repository
- Node.js e npm/yarn configurati nel tuo progetto
Configurazione della pipeline di Azure DevOps
Sezione intitolata “Configurazione della pipeline di Azure DevOps”Passo 1: Crea variabili della pipeline
Sezione intitolata “Passo 1: Crea variabili della pipeline”In primo luogo, configura le variabili necessarie nel tuo progetto di Azure DevOps:
- Naviga nel tuo progetto di Azure DevOps
- Vai a Flussi → Libreria → Gruppi di variabili
- Crea un nuovo gruppo di variabili denominato
Capgo-Variables - Aggiungi le seguenti variabili:
| Nome variabile | Valore | Sicuro |
|---|---|---|
CAPGO_TOKEN | Il tuo Capgo API token | ✅ Sì |
Configurazione semplice
Sezione intitolata “Semplice”Configurazione base che distribuisce in produzione con ogni push al ramo principale:
# 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'Avanzata
Sezione intitolata “Avanzata”Distribuzioni di rami di feature
Sezione intitolata “Distribuzioni di Branch di Funzione”Distribuisci le branch di funzione nei canali di test per la revisione e il 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 create $CHANNEL_NAME --apikey $(CAPGO_TOKEN) || true npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel $CHANNEL_NAME displayName: 'Deploy to Feature Channel'Utilizzo della Crittografia
Sezione intitolata “Utilizzo della Crittografia”Se stai utilizzando Capgo's feature di crittografiaPer poter utilizzare la tua chiave privata, devi archiviarla in modo sicuro nel tuo ambiente CI/CD.
Dopo l'installazione delle chiavi di cifratura aggiungi la tua chiave privata alle variabili di Azure DevOps:
# Display your private key content (copy this output)cat .capgo_key_v2Aggiungi il seguente contenuto come CAPGO_PRIVATE_KEY nelle tue variabili di gruppo di Azure DevOps (segno come segreto), poi utilizzalo nelle pipeline:
# 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'Configurazione Multi-Canale
Sezione intitolata “Configurazione Multi-Canale”Per informazioni complete sulla configurazione e gestione di più canali di distribuzione, vedi la documentazione sui canali.
Configurazione completa con più ambienti e distribuzioni di richiesta di pull:
# 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'Distribuzione Multi-Ambiente
Sezione intitolata “Distribuzione Multi-Ambiente”Per scenari complessi con più ambienti:
# 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'Modello di distribuzione (deploy-steps.yml)
Sezione intitolata “Modello di distribuzione (deploy-steps.yml)”Crea un file di modello riutilizzabile 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 }})'Strategia di distribuzione basata sul ramo (Branch-Based Deployment Strategy)
Sezione intitolata “Strategia di distribuzione basata sul ramo”Configura strategie di distribuzione diverse in base ai rami 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)'Pratiche di sicurezza migliori
Sezione intitolata “Pratiche di Sicurezza”Gestione di Variabili Sicure
Sezione intitolata “Gestione di Variabili Sicure”- Utilizza Gruppi di VariabiliMemorizza i dati sensibili nei gruppi di variabili di Azure DevOps
- Segnala come SegretoMemorizza sempre i token e le chiavi API come variabili segrete
- Accesso allo ScopoLimita l'accesso ai gruppi di variabili a pipeline e utenti specifici
- Rotazione delle ChiaviRota regolarmente i token Capgo e le chiavi API
Monitoraggio e Notifiche
Sezione intitolata “Monitoraggio e Notifiche”Integrazione con i Team
Sezione intitolata “Integrazione con i Team”Aggiungi notifiche per i Team di Microsoft alla tua 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'Notifiche via Email
Sezione intitolata “Notifiche via Email”Configura le notifiche via email per lo stato di deploy:
- 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)Risoluzione dei Problemi
Sezione intitolata “Risoluzione dei Problemi”Problemi comuni
Sezione intitolata “Problemi comuni”Il flusso di lavoro fallisce con “Capgo CLI non trovato”
# Ensure global installation- script: | npm install -g @capgo/cli which capgo || echo "Capgo CLI not found in PATH" displayName: 'Install and verify Capgo CLI'Errori di autenticazione:
# 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)Non trovati artefatti di costruzione:
# List available artifacts for debugging- script: | ls -la $(System.ArtifactsDirectory) find $(System.ArtifactsDirectory) -name "*.js" -o -name "*.html" displayName: 'Debug artifacts'Pianificatore di debug
Sezione intitolata “Pianificatore di debug”Aggiungi passaggi di debug per risolvere i problemi:
- 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'Passaggi successivi
Sezione intitolata “Passaggi successivi”- Scopri Canali per gestire diversi ambienti di distribuzione
- Esplora Storage personalizzato per scenari di distribuzione avanzati
- Configura Crittografia per distribuzioni sicure
- Configura Comportamento di aggiornamento per personalizzare l'applicazione delle aggiornamenti
Con l'integrazione con Azure DevOps, puoi automatizzare i tuoi Capgo deployment e assicurarti aggiornamenti coerenti e affidabili per i tuoi utenti di app mobile.
Continua da Azure DevOps Integration
Sezione intitolata “Continua da Azure DevOps Integration”Se stai utilizzando Integrazione con Azure DevOps per pianificare l'automazione CI/CD, connettila con Capgo CI/CD per il flusso di lavoro del prodotto in Capgo CI/CD, Capgo Native Builds per il flusso di lavoro del prodotto in Capgo Native Builds, Capgo Integrations per il flusso di lavoro del prodotto in Capgo Integrations, Integrazione CI/CD per i dettagli di implementazione in Integrazione CI/CD, e GitHub Azioni di integrazione per i dettagli di implementazione in GitHub Azioni di integrazione.