Azure DevOps 통합
__CAPGO_KEEP_0__ 설치 안내와 이 플러그인의 전체 마크다운 가이드를 복사합니다.
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.
사전 조건
사전 조건 제목 ‘사전 조건’Azure DevOps 통합을 설정하기 전에 다음을 확인하세요.
- Azure DevOps 조직 및 프로젝트가 있습니다.
- Capgo 계정에 앱이 설정된 경우
- code의 소스 코드가 Azure Repos Git 저장소에 저장된 경우
- Node.js와 npm/yarn이 프로젝트에 설정된 경우
Azure DevOps Pipeline 설정
Azure DevOps Pipeline 설정1단계: Pipeline 변수 생성
1단계: Pipeline 변수 생성먼저 Azure DevOps 프로젝트에서 필요한 변수를 설정하세요.
- Azure DevOps 프로젝트로 이동하세요.
- Azure DevOps로 이동하세요. 파이프라인 → 라이브러리 → 변수 그룹
- 새로운 변수 그룹을 생성하여 이름을
Capgo-Variables - 다음 변수를 추가하세요:
| 변수 이름 | 값 | 보안 |
|---|---|---|
CAPGO_TOKEN | Capgo API 토큰이 있습니다. | ✅ Yes |
프로덕션으로 배포하는 기본 설정: 푸시를 받은 메인 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 배포
Section titled “기능 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 create $CHANNEL_NAME --apikey $(CAPGO_TOKEN) || true npx @capgo/cli bundle upload --apikey $(CAPGO_TOKEN) --channel $CHANNEL_NAME displayName: 'Deploy to Feature Channel'제목 ‘암호화 사용’
만약 __CAPGO_KEEP_0__의 암호화 기능을 사용 중이라면, CI/CD 환경에서 개인 키를 안전하게 저장해야 합니다. Capgo’s encryption feature, you’ll need to store your private key securely in your CI/CD environment.
After setting up encryption keys __CAPGO_KEEP_0__에 로컬에서 개인 키를 Azure DevOps 변수에 추가하세요:
# Display your private key content (copy this output)cat .capgo_key_v2__CAPGO_KEEP_3__에 이 내용을 추가하세요 CAPGO_PRIVATE_KEY Azure DevOps 변수 그룹 (비밀으로 표시)에서 이 키를 사용하세요:
# 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'다중 채널 구성
다중 채널 구성다중 배포 채널을 설정하고 관리하는 데 대한 자세한 정보는 채널 문서.
다중 환경 구성과 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 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'다중 환경 배포
다중 환경에 대한 복잡한 시나리오:클립보드 복사
# 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'Deployment Template (deploy-steps.yml)
__CAPGO_KEEP_0__ (배포 스크립트)다시 사용 가능한 템플릿 파일을 생성합니다. 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 배포 전략
__CAPGO_KEEP_0__ (Branch-Based 배포 전략)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)'보안 최적화 방법
__CAPGO_KEEP_0__ (보안 최적화 방법)보안 변수 관리
__CAPGO_KEEP_0__ (보안 변수 관리)- 변수 그룹 사용: Azure DevOps 변수 그룹에서_sensitive 데이터 저장
- 비밀 표시: API 토큰 및 키 항상 비밀 변수로 표시
- 권한 범위: 특정 pipe line 및 사용자에 한하여 변수 그룹 접근 제한
- 키 회전: Capgo API 토큰 정기적으로 회전
모니터링 및 알림
모니터링 및 알림팀즈 통합
팀즈 통합Microsoft Teams 알림을 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'이메일 알림
이메일 알림배포 상태에 대한 이메일 알림을 구성하세요:
- 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)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'디버그 PIPELINE
디버그 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'다음 단계
다음 단계 섹션- 알아보기 채널 __CAPGO_KEEP_0__를 관리하는 다양한 배포 환경
- Explore 고급 배포 시나리오를 위해 Custom Storage 배포를 위해 Set up
- secure deployments를 위해 Encryption Configure Update Behavior를 위해 secure deployments를 위해
- 업데이트를 적용하는 방법을 customize하기 위해 Azure DevOps와의 통합을 통해 __CAPGO_KEEP_0__ 배포를 자동화하고, 모바일 앱 사용자에게 일관된, 신뢰할 수 있는 업데이트를 보장할 수 있습니다. Azure DevOps Integration에서 계속하기로 결정했습니다.
Capgo 배포를 관리하는 다양한 환경
Azure DevOps와의 통합을 통해 __CAPGO_KEEP_0__ 배포를 자동화하고, 모바일 앱 사용자에게 일관된, 신뢰할 수 있는 업데이트를 보장할 수 있습니다.
Azure DevOps 통합에서 계속하기Azure DevOps 통합을 사용 중이라면 Azure DevOps 통합 Azure DevOps 통합과 Capgo CI/CD Capgo CI/CD에서 제품 워크플로우를 위해 Capgo 네이티브 빌드 Capgo 네이티브 빌드에서 제품 워크플로우를 위해 Capgo 통합 Capgo 통합에서 제품 워크플로우를 위해 CI/CD 통합 CI/CD 통합 구현 세부 사항을 위해 GitHub 액션 통합 GitHub 액션 통합 구현 세부 사항을 위해.