GitHub 연결하기
Mocco는 GitHub 저장소 또는 조직 웹훅을 통해 push, pull request, 이슈, 릴리스, 워크플로 실행 이벤트를 받습니다. GitHub에서는 Mocco가 서명 시크릿을 생성하며, 사용자가 그 시크릿을 GitHub에 붙여 넣습니다.
이 작업은 배포 거버넌스를 위해 Mocco GitHub App을 연결하는 것과 별개입니다. 알림 소스는 일반 웹훅이며, 관리자 권한이 있는 저장소나 조직이면 어디든 추가할 수 있습니다.
Mocco의 소유자나 관리자여야 하고, 저장소 웹훅이면 해당 저장소의 관리자, 조직 웹훅이면 해당 조직의 소유자여야 합니다.
1. Mocco에서 소스 만들기
Notifications > Sources를 열고 Add source를 클릭합니다.
Kind에서 GitHub를 고르고,
acme/web같은 Name을 입력합니다.Create source를 클릭합니다.
Mocco는 새 시크릿을 한 번만 보여 줍니다. Copy를 클릭하고, GitHub에 붙여 넣을 때까지 보관하세요. Mocco는 시크릿을 다시 보여 주지 않습니다. 잃어버렸다면 소스에서 Rotate secret을 클릭해 새 시크릿을 받고, 그 시크릿을 GitHub에 붙여 넣으세요.

목록에서 소스의 Ingest URL도 복사합니다.
2. GitHub에 웹훅 추가
저장소의 경우:
GitHub에서 저장소를 열고 Settings를 클릭합니다.
왼쪽 사이드바에서 Webhooks, Add webhook을 차례로 클릭합니다.
조직의 경우: 프로필 사진, Your organizations, 해당 조직 옆의 Settings를 차례로 클릭한 다음 Webhooks와 Add webhook을 클릭합니다.
그런 다음 양식을 채웁니다.
Payload URL: Mocco에서 복사한 소스의 ingest URL.
Content type: application/json을 고릅니다. Mocco는 폼 인코딩 형식을 읽을 수 없습니다. 그런 전달은
malformed JSON body라는 사유와 함께ignored로 기록됩니다.Secret: Mocco가 생성한 시크릿을 붙여 넣습니다.
"Which events would you like to trigger this webhook?"에서 Let me select individual events를 고르고, 다음 목록에서 원하는 이벤트를 선택합니다. push(
push), pull request(pull_request), 이슈(issues), 릴리스(release), 워크플로 실행(workflow_run)입니다. 그 밖의 이벤트는ignored로 기록됩니다.Active를 선택한 상태로 두고 Add webhook을 클릭합니다.
GitHub는 곧바로 ping을 보냅니다. 이 이벤트는 Mocco의 Activity 탭에 사유 ping과 함께 ignored로 나타나며, URL과 시크릿이 올바르다는 뜻입니다.
받게 되는 이벤트
| GitHub 이벤트 | Mocco 이벤트 |
|---|---|
push | github.push |
pull_request opened / reopened | github.pull_request.opened / github.pull_request.reopened |
pull_request closed, merged | github.pull_request.merged |
pull_request closed, not merged | github.pull_request.closed |
issues opened / reopened / closed | github.issues.opened / .reopened / .closed |
release published | github.release.published |
실패, 시간 초과, 시작 실패로 끝난 workflow_run completed | github.workflow_run.failed |
성공으로 끝난 workflow_run completed | github.workflow_run.succeeded |
그 밖의 모든 action 또는 이벤트(pull_request edited, issues labeled, 취소된 실행 등) | ignored로 기록 |
필터 키:
| 이벤트 | 키 |
|---|---|
github.push | repo(acme/web), refType(branch 또는 tag), branch(브랜치 push에만), hasCommits(true 또는 false) |
github.pull_request.* | repo, baseBranch(pull request가 대상으로 하는 브랜치) |
github.issues.*, github.release.published | repo |
github.workflow_run.* | repo, workflow(워크플로 이름), branch |
hasCommits는 텍스트가 아니라 true/false 값입니다. GitHub 프리셋은 hasCommits = true인 github.push(브랜치 삭제와 빈 push는 조용히 넘어갑니다), pull request 이벤트 네 개, 이슈 이벤트 세 개, github.release.published, github.workflow_run.failed를 추가합니다. main에 대한 push만 받으려면 github.push에 branch=main 필터를 건 규칙을 추가하세요.
동작 확인
저장소에 커밋을 push합니다. push가 Activity에 published 결과로 나타납니다.
GitHub에서 웹훅을 열고 Recent deliveries를 클릭하면 최근 3일간의 전달 내역과 각각에 대한 Mocco의 응답을 볼 수 있습니다. 202는 Mocco가 기록했다는 뜻입니다. Mocco가 전달을 거부했다면(예를 들어 시크릿을 잘못 넣어 401이 나온 경우) 원인을 고치고 Redeliver를 클릭하세요. Mocco는 GitHub 전달 ID마다 기록을 하나만 보관하므로, 이미 기록한 전달을 다시 보내도 달라지는 것은 없습니다. 다른 응답은 문제 해결을 참고하세요.