Azure DevOps 통합
설치
Capgo Live Update와 Azure DevOps Pipelines를 통합하여 앱 업데이트를 자동으로 배포할 수 있습니다. code 변경 사항이 푸시될 때마다. 이 가이드는 자동 빌드, 테스트 및 배포 워크플로우를 설정하는 방법을 다룹니다.
Azure DevOps 조직 및 프로젝트
- __CAPGO_KEEP_0__ 계정과 앱이 구성된 앱
- Capgo 계정에 앱이 설정된 상태
- Node.js 및 code/yarn이 프로젝트에 설치되어 있는지 확인하세요
- Node.js 및 npm/yarn이 프로젝트에 설정되어 있습니다.
1단계: Pipeline 변수 만들기
1단계: Pipeline 변수 만들기첫 번째로, Azure DevOps 프로젝트에서 필요한 변수를 설정하세요:
- Azure DevOps 프로젝트로 이동하세요
- 가장 먼저 파이프라인 → 라이브러리 → 변수 그룹
- 새로운 변수 그룹을 만들고 이름을
Capgo-Variables - 다음과 같은 변수를 추가하세요:
| 변수 이름 | 가치 | 보안 |
|---|---|---|
CAPGO_TOKEN | Capgo API 인증 토큰 | ✅ 예 |
제목 "Simple"
Section기본 설정이 메인 branch로 푸시될 때마다 프로덕션으로 배포됩니다:
# 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'고급
고급기능 branch 배포
기능 branch 배포기능 branch를 테스트 채널로 배포하여 검토 및 테스트합니다:
# 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'암호화 사용
암호화 사용만약에 Capgo의 암호화 기능을 사용하고 있다면보안 키를 CI/CD 환경에 저장해야 합니다.
설정 후 암호화 키를 설정한 후 로컬에서 개인 키를 Azure DevOps 변수에 추가하세요:
# Display your private key content (copy this output)cat .capgo_key_v2이 내용을 추가하세요 CAPGO_PRIVATE_KEY Azure DevOps 변수 그룹 (비밀으로 표시) 에서 변수를 설정한 후 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'https://capgo.io/docs/live-updates/integrations/azure-devops/ 채널 문서.
다중 환경과 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'다중 환경 배포
제목 ‘다중 환경 배포’다중 환경의 복잡한 시나리오에 대해:
# 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'배포 템플릿 (deploy-steps.yml)
제목 ‘배포 템플릿 (deploy-steps.yml)’재사용 가능한 템플릿 파일을 생성 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 }})'Branch-Based Deployment Strategy
Branch-Based Deployment Strategy 섹션Git branch에 따라 다른 배포 전략을 설정하세요:
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)'보안 최선책
보안 최선책 섹션보안 변수 관리
보안 변수 관리 섹션- 변수 그룹 사용: Azure DevOps 변수 그룹에_sensitive 데이터 저장
- : __CAPGO_KEEP_0__ 토큰과 키는 항상 비밀 변수로 표시하세요: 항상 API 토큰과 키를 비밀 변수로 표시하십시오
- 범위 접근: 특정 pipe라인과 사용자에 대한 변수 그룹 접근 제한
- 키 회전: Capgo API 토큰을 정기적으로 회전하세요
모니터링 및 알림
모니터링 및 알림팀 통합
팀 통합Microsoft 팀 알림을 pipe라인에 추가하세요:
- 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'이메일 알림
이메일 알림배포 상태에 대한 이메일 알림을 구성하세요:
- 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)Section titled “일반적인 문제”
Pipeline이 “__CAPGO_KEEP_0__ __CAPGO_KEEP_1__ not found” 오류로 실패합니다:Pipeline은 “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'빌드 아티팩트가 존재하지 않습니다:
# 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)일반적인 문제
# List available artifacts for debugging- script: | ls -la $(System.ArtifactsDirectory) find $(System.ArtifactsDirectory) -name "*.js" -o -name "*.html" displayName: 'Debug artifacts'Debug Pipeline
Debug Pipeline문제를 해결하기 위해 디버깅 단계를 추가하세요:
- 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'다음 단계
다음 단계- Channels Channels Explore
- 고급 배포 시나리오에 대한 고유 저장소 고급 배포 시나리오에 대한
- 설정하기 암호화 안전한 배포를 위해
- 설정 업데이트 동작 업데이트가 적용되는 방식을 맞춤화하기 위해
Azure DevOps와 통합하면 Capgo 배포를 자동화하고 모바일 앱 사용자에게 일관된, 신뢰할 수 있는 업데이트를 보장할 수 있습니다.
Azure DevOps 통합에서 계속하기
제목: Azure DevOps 통합에서 계속하기Azure DevOps 통합을 사용하여 CI/CD 자동화 계획을 만드는 경우 Azure DevOps 통합을 연결하세요. Capgo CI/CD Capgo CI/CD를 위한 제품 워크플로 Capgo 네이티브 빌드 Capgo 네이티브 빌드를 위한 제품 워크플로 Capgo 통합 Capgo 통합을 위한 제품 워크플로 CI/CD 통합 __CAPGO_KEEP_0__ 액션 통합 GitHub 액션 통합의 구현 세부 정보 GitHub 액션 통합의 구현 세부 정보