C.W.K.
Stream
Lesson 14 of 14 · published

Repository dispatch

~9 min · dispatch, external, webhook

Level 0Apprentice
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

외부 시스템이 workflow 발사

repository_dispatch 가 외부 시스템이 GitHub API 에 POST 해서 workflow trigger 가능하게 해. Payload 는 임의 JSON, github.event.client_payload 에 사용 가능.

흔한 용도:

  • Cross-repo orchestration — repo A 가 build 마치고 deploy 하는 repo B 에서 dispatch 발사.
  • 외부 CI 통합 — Jenkins 가 stage 마치고 deploy 위해 GitHub 에 dispatch.
  • GitHub 외 수동 trigger — Slack slash 명령, 내부 admin 도구, webhook.

POST

POST /repos/{owner}/{repo}/dispatches
Authorization: Bearer <PAT 또는 contents:write 가진 App token>
Body: {
"event_type": "deploy-prod",
"client_payload": { "version": "v1.4.2", "reason": "hotfix" }
}

Workflow 는 on: repository_dispatch: types: [deploy-prod] 으로 청취.

workflow_dispatch 와의 trade-off

  • workflow_dispatch — 수동 UI / gh CLI, typed input, brower/PAT 필요.
  • repository_dispatch — 프로그램, free-form JSON, 머신 대 머신에 적합.

Code

repository_dispatch 청취·yaml
name: external-deploy
on:
  repository_dispatch:
    types: [deploy-prod]

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - name: Show payload
        run: |
          echo "version: ${{ github.event.client_payload.version }}"
          echo "reason: ${{ github.event.client_payload.reason }}"
      - run: ./deploy.sh ${{ github.event.client_payload.version }}
Sibling repo 의 workflow 에서 발사·yaml
      - name: Trigger deploy in other repo
        run: |
          curl -X POST \
            -H 'Accept: application/vnd.github+json' \
            -H "Authorization: Bearer ${{ secrets.CROSS_REPO_PAT }}" \
            https://api.github.com/repos/my-org/deploy-repo/dispatches \
            -d '{"event_type":"deploy-prod","client_payload":{"version":"v1.4.2"}}'

External links

Exercise

Curl 로 sandbox repo 의 repository_dispatch trigger 하는 작은 shell 스크립트 설정. Workflow 가 client_payload echo. 다른 payload 로 스크립트 3 번 실행하고 각각 자기 run 발화 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.