자동으로 라이브 업데이트 또는 네이티브 빌드 선택
설치 지시와 이 플러그인에 대한 전체 마크다운 가이드를 포함한 설정 지시를 복사하세요
Capacitor의 대부분의 릴리스는 자바스크립트만으로 구성되어 라이브 업데이트로 배포해야 합니다. 실시간 업데이트. 일부 변경 사항은 네이티브 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 native 패키지가 현재 채널에 이미 업데이트된 것과 일치한다는 것을 의미합니다. native Capacitor 버전 또는 다른 네이티브 종속성이 플러그인, Capacitor 버전 또는 다른 네이티브 종속성이 변경되었을 때 — 오버-더-에어 배ंडल만으로는 안전하게 장치 업데이트를 수행할 수 없습니다.
releaseType 비교합니다. 네이티브 패키지 메타데이터 Capacitor/Cordova 플러그인 및 버전입니다. 그것은 그것은 모든 ios/, android/또는 capacitor.config.*를 보지 못합니다. git에 경로를 먼저 게이트 하세요. 그런 다음 releaseType 의 종속성 호환성을 위해 사용하세요. 아래의 예제는 두 가지 모두 수행합니다.
See 원본 호환성 전체 규칙과 수동 매뉴얼을 보려면 bundle compatibility 테이블을 참조하십시오.
필요 조건
필요 조건- Capgo 앱이 등록되어 있고, Capgo __CAPGO_KEEP_1__ 키가 있습니다. Capgo API key CI 비밀을 통해
CAPGO_TOKEN - 실시간 업데이트가 업로드 작동하는 (
bundle upload) — 참조 CI/CD 통합 - Capgo native 작업을 기대하는 경우 CI에서 빌드 자격 증명 GitHub 액션 또는 인증 정보
- 이미 존재하고 프로덕션과 일치하는 채널 (예를 들어)
production) - 채널에
metadata전략으로서 업로드가 모든 것을 수용할 수 있도록--auto-min-update-version(한 번만):
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-safe인지 Capgo에게 물어본다.
releaseType커밋이 __CAPGO_KEEP_0__ - __CAPGO_KEEP_0__
OTA, 업로드 하기--fail-on-incompatible및--auto-min-update-version. - If
native, Capgo Build를 실행한 후 Capgo에 맞는 번들을 업로드 하세요.--auto-min-update-version그렇게 채널의 네이티브 메타데이터가 업데이트됩니다. 하지 마세요 사용하지 마세요--fail-on-incompatible그것을 기준으로 하는 업로드 — 새로운 네이티브 패키지는 다를 수 있습니다. Native + OTA Channel Workflow 채널 수준 FAQ를 참조하세요.
GitHub Actions
GitHub Actions원하는 워크플로우를 선택하여 네이티브 경로를 제어하고, 그 다음에 branch on을 사용하여 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__ Actions for __CAPGO_KEEP_1__ Build에서 설명한 것과 같이 서명 비밀을 연결합니다. GitHub Actions for Capgo Build.
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: - main__CAPGO_KEEP_0__ 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과 같은 단일 작업을 유지): if, like GitLab above):
- Azure Pipelines — 스크립트 단계에서 출력 변수를 설정하고 그 후 사용
condition: eq(variables['releaseType'], 'OTA') - Bitbucket Pipelines — 쓰기
RELEASE_TYPE=…로$BITBUCKET_PIPELINES_VARIABLES_PATHdeclare it underoutput-variables와condition: state: RELEASE_TYPE == "OTA"그리고condition) - branch later steps with —
when(파일 아티팩트만으로는ifCircleCIwhen - 는 config-compile 시간에 평가되므로 런타임 셸로 branch 하거나 동적 config / 연속성으로 branch 하세요. workspace 값은 — 표준 출력을 환경 변수로 캡처하고 사용하세요
when { environment name: 'RELEASE_TYPE', value: 'OTA' }
속도 향상을 위한 경로 필터 (선택 사항)
속도 향상을 위한 경로 필터 (선택 사항) 섹션경로 필터는 Capgo 확인 대신 비용 최적화입니다. 문서 전용 경로를 제외하는 것을 선호하세요. 웹 빌드는 종종 vite.config.*, tsconfig*.json그리고 프레임워크 구성 파일:
on: push: branches: [main] paths-ignore: - '**.md' - 'docs/**' - '.github/**'만약 허용 목록을 사용한다면, 웹 빌드와 네이티브 빌드가 읽는 모든 입력을 포함해야 합니다. src/ 그리고 package.json.
속도 향상을 위한 경로 필터 (선택 사항)
- Capgo 빌드는 서명된 바이너리를 생성하고 테스트 플라이트 / 플레이에 제출할 수 있습니다 (see 설정).
- JS 번들을 업로드하세요.
--auto-min-update-version(메타데이터 전략) 채널이 새로운 네이티브 패키지를 기록하기 때문에 JS-만의 커밋이 여전히 (metadata strategy) 새로운 네이티브 패키지를 기록하기 때문에 JS-만의 커밋이 여전히native. - 사용자가 새로운 바이너리를 설치한 후에, 나중에 JavaScript-만의 커밋은 다시
OTA관련 문서