외부 시스템이 워크플로를 실행시킨다
repository_dispatch를 쓰면 외부 시스템이 GitHub API에 POST 요청을 보내서 워크플로를 실행할 수 있어. 페이로드는 원하는 JSON 형태로 자유롭게 담을 수 있고, github.event.client_payload로 꺼내 쓸 수 있어.
주로 이렇게 활용해:
- 저장소 간 연동 — A 저장소에서 빌드를 끝내고 배포를 담당하는 B 저장소에서 디스패치를 발동해.
- 외부 CI 연동 — Jenkins가 단계를 마치고 배포하려고 GitHub에 디스패치를 보내.
- GitHub 밖에서 수동 실행 — Slack 슬래시 명령, 내부 관리 도구, 웹훅 등을 활용해.
POST
POST /repos/{owner}/{repo}/dispatches
Authorization: Bearer <PAT 또는 contents:write 권한이 있는 App 토큰>
Body: {
"event_type": "deploy-prod",
"client_payload": { "version": "v1.4.2", "reason": "hotfix" }
}워크플로는 on: repository_dispatch: types: [deploy-prod]로 이벤트를 기다려.
workflow_dispatch와 비교했을 때 장단점
workflow_dispatch— 수동 UI나 gh CLI로 실행하고, 타입이 정해진 입력값을 받으며, 브라우저나 PAT가 필요해.repository_dispatch— 프로그램으로 실행하고, 자유 형식 JSON을 주고받으며, 머신 간 통신에 딱 맞아.