자동으로 라이브 업데이트 또는 네이티브 빌드를 선택
설치
대부분의 Capacitor 릴리스는 자바스크립트 전용이며 live 업데이트로 배포해야 합니다. 실시간 업데이트. 일부 변경 사항은 네이티브 code를 건드리고 새로운 바이너리 code 빌드에서 필요합니다. Capgo 빌드. 이 가이드는 GitHub 액션, GitLab CI, 또는 다른 CI/CD 플랫폼이 푸시마다 올바른 경로를 선택할 수 있도록 해줍니다. — 인간의 결정이 필요하지 않습니다.
결정
제목 ‘결정’Capgo은 이미 안전한 경로를 알고 있습니다. 웹 빌드 후 (업로드 또는 네이티브 빌드 요청하기 전에) 실행하십시오:
npx @capgo/cli@latest bundle releaseType com.example.app --channel production# → OTA ship with bundle upload# → native ship with Capgo BuildOTA live 채널에 있는 것과 일치하는 네이티브 패키지를 의미합니다. native Capacitor 버전 또는 다른 네이티브 의존성이 변경된 경우 플러그인, Capacitor — 안전하게 업데이트할 수 없는 장치입니다.
releaseType 비교합니다. 네이티브 패키지 메타데이터 Capacitor/Cordova 플러그인 및 버전 하지 않습니다. 수정 ios/, android/or capacitor.config.*Gate releaseType git에 먼저 경로를 제어하고, 의존성 호환성을 위해 사용하세요. — 아래 예제는 두 가지 모두 수행합니다.
See 원본 호환성 전체 규칙과 매뉴얼을 보려면 bundle compatibility 테이블을 참조하십시오.
사전 요구 사항
사전 요구 사항- Capgo 앱이 등록되어 있고, Capgo __CAPGO_KEEP_1__ 키가 있습니다. Capgo API key CI 비밀번호를 저장하세요.
CAPGO_TOKEN - 실시간 업데이트가 업로드 작동하는 (
bundle upload) — 참조 CI/CD 통합 - Capgo CI에서 네이티브 작업을 기대하는 경우 네이티브 빌드 자격 증명 저장 GitHub 작업 또는 __CAPGO_KEEP_0__ 네이티브 업데이트를 지원하는 앱플로우, 카파웨이즈, 카파웨이즈와 같은 대안을 비교할 때
- __CAPGO_KEEP_0__ 앱플로우
production) - __CAPGO_KEEP_0__
metadata__CAPGO_KEEP_0__--auto-min-update-version__CAPGO_KEEP_0__
npx @capgo/cli@latest channel set production com.example.app --disable-auto-update metadatapipeline이 어떻게 작동해야 하는가
pipeline이 어떻게 작동해야 하는가flowchart TD A[Push / merge] --> B[Install + web build] B --> C["bundle releaseType"] C -->|OTA| D["bundle upload"] C -->|native| E["build request iOS + Android"] E --> F[Store / TestFlight / Play]
- 일반적인 웹 자산 빌드
- 커밋이 __CAPGO_KEEP_0__
ios/,android/또는capacitor.config.*커밋이 __CAPGO_KEEP_0__ - 커밋이 OTA로 안전한지 Capgo에게 물어본다.
releaseType커밋이 - __CAPGO_KEEP_0__
OTA업로드 하기 위해--fail-on-incompatible그리고--auto-min-update-version. - 만약
nativeCapgo 빌드를 실행한 후, 해당 채널의 원본 메타데이터를 업데이트하기 위해--auto-min-update-version그런 채널의 원본 메타데이터가 업데이트되도록 하세요. 그것을 사용하지 마세요.--fail-on-incompatible그것을 그것을 __CAPGO_KEEP_0__ 액션
GitHub 액션
GitHub 액션 섹션원하는 워크플로우를 선택하여 네이티브 경로를 제어하고, 다음에 브랜치하는 workflow releaseType:
name: Capgo Release
on: push: branches: [main]
jobs: decide: runs-on: ubuntu-latest outputs: release_type: ${{ steps.verdict.outputs.type }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm'
- run: npm ci - run: npm run build
- name: Decide OTA vs native id: verdict env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | BEFORE="${{ github.event.before }}" if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then BEFORE="$(git rev-parse HEAD~1 2>/dev/null || echo '')" fi if [ -z "$BEFORE" ] || git diff --name-only "$BEFORE" "${{ github.sha }}" \ | grep -qE '^(ios/|android/|capacitor\.config\.)'; then TYPE=native echo "Native path/config changed (or no prior commit) — forcing native" else TYPE=$(npx @capgo/cli@latest bundle releaseType com.example.app --channel production | tr -d '[:space:]') fi echo "type=$TYPE" >> "$GITHUB_OUTPUT" echo "Capgo release type: $TYPE"
live_update: needs: decide if: needs.decide.outputs.release_type == 'OTA' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - name: Upload live update env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | npx @capgo/cli@latest bundle upload com.example.app \ --channel production \ --fail-on-incompatible \ --auto-min-update-version
native_build: needs: decide if: needs.decide.outputs.release_type == 'native' runs-on: ubuntu-latest strategy: fail-fast: false matrix: platform: [ios, android] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - run: npx cap sync ${{ matrix.platform }} - name: Capgo Build ${{ matrix.platform }} env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | npx @capgo/cli@latest build request com.example.app \ --platform ${{ matrix.platform }} \ --build-mode release
native_bundle: needs: [decide, native_build] if: needs.decide.outputs.release_type == 'native' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - name: Upload bundle for new native baseline env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | # Channel must already be on metadata (see Prerequisites above) npx @capgo/cli@latest bundle upload com.example.app \ --channel production \ --auto-min-update-version바꾸기 com.example.app 및 __CAPGO_KEEP_0__에서 설명하는 서명 비밀을 연결 GitHub 액션을 Capgo 빌드.
GitLab CI
GitLab CI 제목GitLab은 pipeline이 생성될 때 rules branch와 shell을 사용하여 if 내부에 하나의 배포 작업 (또는 동적 자식 pipeline을 생성) 필요한 경우 별도의 네이티브 매트릭스 작업을 생성): .gitlab-ci.yml
image: node:24
stages: - build - deploy
variables: APP_ID: com.example.app CHANNEL: production
build_web: stage: build script: - npm ci - npm run build artifacts: paths: - dist/ - node_modules/ expire_in: 1 hour only: - main
deploy: stage: deploy needs: [build_web] script: - | BEFORE="${CI_COMMIT_BEFORE_SHA:-}" if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then BEFORE="$(git rev-parse HEAD~1 2>/dev/null || echo '')" fi if [ -z "$BEFORE" ] || git diff --name-only "$BEFORE" "$CI_COMMIT_SHA" \ | grep -qE '^(ios/|android/|capacitor\.config\.)'; then TYPE=native else TYPE=$(npx @capgo/cli@latest bundle releaseType "$APP_ID" --channel "$CHANNEL" | tr -d '[:space:]') fi echo "Capgo release type: $TYPE" if [ "$TYPE" = "OTA" ]; then npx @capgo/cli@latest bundle upload "$APP_ID" \ --channel "$CHANNEL" \ --fail-on-incompatible \ --auto-min-update-version elif [ "$TYPE" = "native" ]; then npx cap sync npx @capgo/cli@latest build request "$APP_ID" --platform ios --build-mode release npx @capgo/cli@latest build request "$APP_ID" --platform android --build-mode release npx @capgo/cli@latest bundle upload "$APP_ID" \ --channel "$CHANNEL" \ --auto-min-update-version else echo "Unexpected release type: $TYPE" >&2 exit 1 fi only: - mainGitLab CI CAPGO_TOKEN 그리고 Capgo 빌드 인증 변수를 마스킹/보호된 CI/CD 변수로 설정합니다.
다른 CI 플랫폼
“다른 CI 플랫폼”이라는 제목의 섹션같은 세 단계는 어디서든 작동합니다.
| 단계 | 명령 |
|---|---|
| 판단 | npx @capgo/cli@latest bundle releaseType APP_ID --channel production |
| OTA 경로 | npx @capgo/cli@latest bundle upload APP_ID --channel production --fail-on-incompatible --auto-min-update-version |
| 자연 경로 | npx @capgo/cli@latest build request APP_ID --platform ios (또는 android) --build-mode release |
shell 종료/표준 출력을 플랫폼의 조건문으로 맵핑하거나 (또는 GitLab 위와 같이 단일 작업을 유지): ifOther CI Platforms
- Azure Pipelines — 스크립트 단계에서 출력 변수를 설정하고 나서 사용
condition: eq(variables['releaseType'], 'OTA') - Bitbucket Pipelines — 쓰기
RELEASE_TYPE=…로$BITBUCKET_PIPELINES_VARIABLES_PATHdeclare it underoutput-variables와condition: state: RELEASE_TYPE == "OTA"그리고 나중에 단계를 branchcondition) - (파일 아티팩트만으로는 —
whenAzure Pipelinesif에서 evaluatedwhen - CircleCI는 config-compile 시간에 evaluated되므로 런타임 셸로 branch하고 나서 사용하십시오. (또는 동적 config / continuation), workspace 값이 아닌 — 표준 출력을 환경 변수로 캡처하고 사용하세요
when { environment name: 'RELEASE_TYPE', value: 'OTA' }
경로 필터 (선택 사항, 속도 향상)
섹션 제목: 경로 필터 (선택 사항, 속도 향상)경로 필터는 Capgo 확인 대신 비용 최적화입니다. 문서 전용 경로를 제외하는 것을 선호하세요. 웹 빌드는 종종 프레임워크 구성 파일도 읽습니다: vite.config.*, tsconfig*.json클립보드 복사
on: push: branches: [main] paths-ignore: - '**.md' - 'docs/**' - '.github/**'그리고 src/ 페이지/영역: Capgo 마케팅 웹사이트. 역할: 짧은 UI 레이블 또는 네비게이션 아이템. 보이는 곳: trust.astro 페이지. 메시지 키 `and` (And). package.json.
네이티브 판결 후
섹션 제목: 네이티브 판결 후CI가 네이티브를 선택할 때:
- Capgo 빌드는 서명된 바이너리를 생성하고 테스트 플라이트/플레이에 제출할 수 있습니다 (see 설정).
- JS 번들을 업로드하세요.
--auto-min-update-version(메타데이터 전략) 채널이 새로운 네이티브 패키지를 기록하기 때문에 JS-Only 커밋이 여전히native. - 사용자가 새로운 바이너리를 설치한 후에, 후속의 JavaScript-Only 커밋은 다시
OTA다시.