Skip to content

원본 빌드를 웹후크를 통해 트리거하는 방법

Capgo 일반적으로 laptop 또는 CI 작업에서 빌드를 시작합니다. CI 작업을 통해 배포하는 팀 관리자 대시보드웹, CMS, 또는 내부 포털은 종종 하나의 HTTP 웹 훅: 사용자의 UI에서 버튼을 클릭하고, 서명된 네이티브 빌드가 시작됩니다. 이 안내서에서는 표준 패턴을 보여줍니다. — 사용자의 code 호스트에 대한 얇은 인증된 HTTP 호출, 이 호스트는 사용자가 이미 사용하는 Capgo 빌드 워크플로를 실행합니다.

당신은 아니 Capgo 빌드를 공개하는 '빌드 웹후크'를 노출할 필요가 없습니다. CI가 이미 서명 비밀을 가지고 있으므로 웹후크의 역할은 CI 작업을 안전하게 시작하는 것입니다.

  • A Capgo Build workflow that already works from the __CAPGO_KEEP_0__ 액션 CI UI에서 이미 작동하는 __CAPGO_KEEP_0__ 빌드 워크플로GitHub 액션)
  • GitHub 권한
  • 관리자 대시보드가 (헤더 또는 본문) 전송하는 공유 비밀
Option A — GitHub 저장소 디스패치 (권장)

GitHub은 인증된 API 호출을 받고 GitHub이 웹후크를 듣는 워크플로우를 시작합니다. repository_dispatch. 어떤 대시보드도 POST JSON이 웹후크를 발동시킬 수 있습니다.

웹후크의有效성을 검증합니다. __CAPGO_KEEP_1__ : before (context: HTML text fragment from a longer Capgo UI string (parent key `create_an_issue_and_discuss_before_working_on_a_new_feature`). Page/area: Capgo marketing website. Role: Long marketing or legal paragraph. Seen in: page contributing.astro. Message key `create_an_issue_and_discuss_before_working_on_a_new_feature` (Create An Issue And Discuss Before Working On A New Feature). | HTML text fragment from a longer Capgo UI string (parent key `mention_issue_before_working`). Page/area: Capgo marketing website. Role: Website copy sentence. Seen in: page contributing.astro. Message key `mention_issue_before_working` (Mention Issue Before Working).) 체크아웃과 비밀을 담고 있는 단계 전까지. 작업 출력 / 환경 변수를 통해 승인된 값을 전달하되, never interpolate client_payload 직접으로 run: 스크립트 (스크립트 주입 지침).

github/작업 흐름/capgo-빌드 웹후크.yml
name: Capgo Build (Webhook)
on:
repository_dispatch:
types: [capgo-native-build]
jobs:
validate:
runs-on: ubuntu-latest
outputs:
platform: ${{ steps.check.outputs.platform }}
mode: ${{ steps.check.outputs.mode }}
ref: ${{ steps.check.outputs.ref }}
platforms_json: ${{ steps.check.outputs.platforms_json }}
steps:
- id: check
env:
RAW_PLATFORM: ${{ github.event.client_payload.platform }}
RAW_MODE: ${{ github.event.client_payload.mode }}
RAW_REF: ${{ github.event.client_payload.ref }}
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
run: |
PLATFORM="${RAW_PLATFORM:-android}"
MODE="${RAW_MODE:-release}"
REF="${RAW_REF:-$DEFAULT_BRANCH}"
case "$PLATFORM" in ios|android|both) ;; *)
echo "Invalid platform: $PLATFORM" >&2; exit 1;;
esac
case "$MODE" in debug|release) ;; *)
echo "Invalid mode: $MODE" >&2; exit 1;;
esac
# Allowlist branches / tags / full SHAs only
if [[ ! "$REF" =~ ^(main|master|production|release/[A-Za-z0-9._-]+|[0-9a-f]{40})$ ]]; then
echo "Ref not allowlisted: $REF" >&2
exit 1
fi
if [ "$PLATFORM" = "both" ]; then
PLATFORMS_JSON='["ios","android"]'
else
PLATFORMS_JSON=$(printf '["%s"]' "$PLATFORM")
fi
{
echo "platform=$PLATFORM"
echo "mode=$MODE"
echo "ref=$REF"
echo "platforms_json=$PLATFORMS_JSON"
} >> "$GITHUB_OUTPUT"
build:
needs: validate
runs-on: ubuntu-latest
environment: ${{ needs.validate.outputs.mode == 'release' && 'production' || 'build-debug' }}
strategy:
fail-fast: false
matrix:
platform: ${{ fromJSON(needs.validate.outputs.platforms_json) }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.validate.outputs.ref }}
- uses: actions/setup-node@v6
with:
node-version: '24'
cache: 'npm'
- run: npm ci
- run: npm run build
- name: Sync native project
env:
PLATFORM: ${{ matrix.platform }}
run: npx cap sync "$PLATFORM"
- name: Capgo Build
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 }}
PLATFORM: ${{ matrix.platform }}
MODE: ${{ needs.validate.outputs.mode }}
run: |
npx @capgo/cli@latest build request com.example.app \
--platform "$PLATFORM" \
--build-mode "$MODE"

2. GitHub 토큰을 생성하세요

제목 ‘2. GitHub 토큰을 생성하세요’

GitHub 앱 설치 토큰 또는 개인 액세스 토큰을 생성하세요. 내용: 읽기 및 쓰기 저장소에 (빌드 웹후크를 위해) repository_dispatch관리자 백엔드에만 저장하세요 — 브라우저에 절대 저장하지 마세요.

3. 웹 훅을 관리자 대시보드에서 호출하세요.

제목: 3. 웹 훅을 관리자 대시보드에서 호출하세요.

백엔드(브라우저가 아닌)는 다음과 같이 보내야 합니다:

터미널 창
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{
"event_type": "capgo-native-build",
"client_payload": {
"platform": "both",
"mode": "release",
"ref": "main",
"requested_by": "admin@example.com"
}
}'
필드목적
event_type관리자 대시보드에서 웹 훅을 호출해야 합니다. types workflow(capgo-native-build)
client_payload.platformios, android, 또는 both
client_payload.modedebug 또는 release
client_payload.refbranch 또는 tag를 빌드할 수 있습니다.

웹훅을 UI의 "자연어 앱 빌드" 버튼에 동일한 JSON POST로 연결하세요. 대시보드는 백엔드만 접근해야 합니다. 관리자 백엔드가 __CAPGO_KEEP_0__를 보관합니다. GITHUB_TOKEN.

Option B — 모든 호스트에 가능한 작은 프록시 웹훅

Option B — 모든 호스트에 가능한 작은 프록시 웹훅

관리자 도구가 URL을 제어하는 URL에만 POST할 수 있다면 (Zapier, Make, Cloudflare Worker, Express 경로), GitHub 앞에 짧은 프록시를 설치하세요:

// Example Cloudflare Worker / Node handler (sketch)
export default {
async fetch(request, env) {
if (request.method !== 'POST') {
return new Response('Method not allowed', { status: 405 })
}
if (request.headers.get('x-webhook-secret') !== env.WEBHOOK_SECRET) {
return new Response('Unauthorized', { status: 401 })
}
const body = await request.json().catch(() => ({}))
const platform = body.platform || 'both'
const mode = body.mode || 'release'
const ref = body.ref || 'main'
if (!['ios', 'android', 'both'].includes(platform)) {
return new Response('Invalid platform', { status: 400 })
}
if (!['debug', 'release'].includes(mode)) {
return new Response('Invalid mode', { status: 400 })
}
if (!/^(main|master|production|release\/[A-Za-z0-9._-]+|[0-9a-f]{40})$/.test(ref)) {
return new Response('Ref not allowlisted', { status: 400 })
}
const res = await fetch(
`https://api.github.com/repos/${env.GITHUB_OWNER}/${env.GITHUB_REPO}/dispatches`,
{
method: 'POST',
headers: {
Accept: 'application/vnd.github+json',
Authorization: `Bearer ${env.GITHUB_TOKEN}`,
'X-GitHub-Api-Version': '2022-11-28',
},
body: JSON.stringify({
event_type: 'capgo-native-build',
client_payload: { platform, mode, ref },
}),
},
)
return new Response(res.status === 204 ? 'Build queued' : await res.text(), {
status: res.status === 204 ? 200 : res.status,
})
},
}

관리자 제품을 구성하세요:

설정
URLhttps://your-worker.example.com/native-build
메서드POST
헤더x-webhook-secret: <shared secret>
본문{ "platform": "both", "mode": "release" }

웹훅을 관리자 대시보드에 연결하는 일반적인 형태는 대시보드에서 하나의 URL과 하나의 비밀 키를 저장하고 Capgo 자격 증명은 GitHub 액션에 남아 있습니다.

GitLab PipeLine 트리거

GitLab PipeLine 트리거

GitLab은 pipeline 트리거 토큰 natural 웹훅 목표입니다.

# .gitlab-ci.yml fragment
capgo_native_webhook:
stage: build
script:
- npm ci && npm run build
- npx cap sync "${PLATFORM:-android}"
- npx @capgo/cli@latest build request com.example.app --platform "${PLATFORM:-android}" --build-mode "${BUILD_MODE:-release}"
rules:
- if: '$CI_PIPELINE_SOURCE == "trigger"'

트리거 토큰을 만들려면 설정 → CI/CD →_PIPELINE 트리거 토큰, 그 다음 관리자 백엔드에서:

터미널 창
curl -X POST \
-F token=$GITLAB_TRIGGER_TOKEN \
-F ref=main \
-F "variables[PLATFORM]=android" \
-F "variables[BUILD_MODE]=release" \
https://gitlab.com/api/v4/projects/PROJECT_ID/trigger/pipeline

두 플랫폼 모두, 두 개의 트리거를 실행하거나 GitHub 예시와 같이 작업을 병렬로 확장하는 방법을 사용할 수 있습니다.

Bitbucket 및 Azure

Bitbucket 및 Azure
플랫폼웹후크 메커니즘
Bitbucketpipeline 트리거 URL 또는 사용자 지정 pipe line + 앱 패스워드 POST
Azure DevOpsPipeline run REST API PAT를 사용하여 수동 pipe line을 사용하세요. CI UI에서 트리거

패턴은 동일합니다: admin → 비밀 확인 → 호스트 API → Capgo 빌드 작업.

관리자 도구의 Payload 체크리스트

대시보드 폼이 빌드되면 다음을 수집하세요:

플랫폼

  • — ios / android / 양쪽 모드
  • 모드 — QA (테스트) 또는 스토어 (스토어) 배포
  • Git ref — 빌드할 branch 또는 tag
  • Actor — 감사 로그 (pass through) 위해 이메일 또는 사용자 ID client_payload)

Optional: CI가 빌드 후 API에 다운로드 URL을 전송 --output-record / build last-output.

보안

보안
  • 인증x-webhook-secret허용 목록
  • , 및 platform, moderef both proxy와 workflow에서 validate 작업 — 취급 client_payload 무뢰한 입력으로 다루세요.
  • 받은 값은 env vars / 작업 출력을 통해 전달하세요; payload field를 스크립트에 삽입하지 마세요. run: __CAPGO_KEEP_0__/GitLab 토큰은 서버측에서만 유지하세요.
  • Keep GitHub/GitLab tokens server-side only.
  • Proxy를 제한하세요; 원본 빌드는 빌드 분량을 소모합니다.
  • 스토어에 제출하는 릴리즈에 대해
  • __CAPGO_KEEP_0__ 보호된 환경으로 mapping하거나 release to a protected GitHub Environment (as in the sample) or require an extra confirmation flag checked in validate.
관련 문서