내용으로 건너뛰기

자동으로 라이브 업데이트 또는 네이티브 빌드를 선택

대부분의 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 Build

OTA live 채널에 있는 것과 일치하는 네이티브 패키지를 의미합니다. native Capacitor 버전 또는 다른 네이티브 의존성이 변경된 경우 플러그인, Capacitor — 안전하게 업데이트할 수 없는 장치입니다.

releaseType 비교합니다. 네이티브 패키지 메타데이터 Capacitor/Cordova 플러그인 및 버전 하지 않습니다. 수정 ios/, android/or capacitor.config.*Gate releaseType git에 먼저 경로를 제어하고, 의존성 호환성을 위해 사용하세요. — 아래 예제는 두 가지 모두 수행합니다.

See 원본 호환성 전체 규칙과 매뉴얼을 보려면 bundle compatibility 테이블을 참조하십시오.

사전 요구 사항

사전 요구 사항
터미널 창
npx @capgo/cli@latest channel set production com.example.app --disable-auto-update metadata

pipeline이 어떻게 작동해야 하는가

pipeline이 어떻게 작동해야 하는가
  1. 일반적인 웹 자산 빌드
  2. 커밋이 __CAPGO_KEEP_0__ ios/, android/또는 capacitor.config.*커밋이 __CAPGO_KEEP_0__
  3. 커밋이 OTA로 안전한지 Capgo에게 물어본다. releaseType 커밋이
  4. __CAPGO_KEEP_0__ OTA업로드 하기 위해 --fail-on-incompatible 그리고 --auto-min-update-version.
  5. 만약 nativeCapgo 빌드를 실행한 후, 해당 채널의 원본 메타데이터를 업데이트하기 위해 --auto-min-update-version 그런 채널의 원본 메타데이터가 업데이트되도록 하세요. 그것을 사용하지 마세요. --fail-on-incompatible 그것을 그것을 __CAPGO_KEEP_0__ 액션

원하는 워크플로우를 선택하여 네이티브 경로를 제어하고, 다음에 브랜치하는 workflow releaseType:

github/워크플로우/capgo-릴리스.yml
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은 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

GitLab CI CAPGO_TOKEN 그리고 Capgo 빌드 인증 변수를 마스킹/보호된 CI/CD 변수로 설정합니다.

같은 세 단계는 어디서든 작동합니다.

단계명령
판단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 under output-variablescondition: state: RELEASE_TYPE == "OTA" 그리고 나중에 단계를 branch condition)
  • (파일 아티팩트만으로는 when Azure Pipelines if 에서 evaluated when
  • 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가 네이티브를 선택할 때:

  1. Capgo 빌드는 서명된 바이너리를 생성하고 테스트 플라이트/플레이에 제출할 수 있습니다 (see 설정).
  2. JS 번들을 업로드하세요. --auto-min-update-version (메타데이터 전략) 채널이 새로운 네이티브 패키지를 기록하기 때문에 JS-Only 커밋이 여전히 native.
  3. 사용자가 새로운 바이너리를 설치한 후에, 후속의 JavaScript-Only 커밋은 다시 OTA 다시.
관련 문서