본문 바로가기
ETC

Github - Slack 연동 (w/ user mentioning)

by devson 2020. 12. 31.

업무 효율화를 위해 Slack 알림을 적극적으로 활용할 수 있다.
코드 리뷰가 활발한 개발 조직이라면 PR이나 review comment를 남길 때 Slack 알림을 활용하면
PR을 남겼다고 굳이 얘기를 하지 않아도 알 수 있고, 내 PR에 리뷰가 달렸는지 매번 PR을 확인하지 않아도 된다.
(특히 remote 환경에서 매우 편리하다)

 

이번 포스팅에서는 Github - Slack 연동을 하기 위해 어떻게 구성을 했고 어떤 식으로 동작하는지에 대해 정리해보도록 하겠다.


사실 이미 Github Slack integration이 존재한다.
연동도 매우 간편하고 CLI와 비슷하게 channel에서 command를 통해 설정도 할 수 있다.

 

하지만 딱 하나 아쉬운 점은 Slack mentioning이 안된다는 것이다.
Github와 Slack이 서로 유저를 공유하는 것이 아니다 보니 어쩔 수 없다고는 생각되나,
팀의 규모가 클 경우 PR 관련된 알람이 많아질 텐데 그러면 본인 PR과 관련된 알림을 찾기 힘들 것이다.

 

그래서 Github Slack integration 설정을 통해 mentioning을 할 수 있나 찾아봤는데 나는 찾을 수 없었다...

처음에 연동할 때 오는 메세지를 보면 어떻게 되지 않을까 싶긴한데... 🤔

관련해서는 나 말고도 꽤 needs가 있는 것으로 보인다.
Use slack usernames when referring to GitHub user activity #435

되도록이면 이미 되어있는 것을 사용하면 좋겠지만 아쉽게도 지원해주질 않으니 내가 하는 수밖에... 😇


System Architecture

시스템은 다음과 같이 Github와 Slack 사이에 AWS Lambda를 사용하여 구성했다.

 

(Firebase Cloud Functions를 쓰면 관리 포인트가 줄어들어 더 편리할 것 같은데 Spark 요금제에서는 Outbound가 Google 서비스로 국한된다...)

Step Descryptions

1. PR, Review, comment를 남긴다.

2. Github Webhook이 trigger 된다.

Github에는 특정 조건에 trigger 되는 Webhook이 있다.


이를 사용하여 지정한 URL에 POST method로 Webhook payload를 보낼 수 있다.

이 URL을 Slack Incoming Webhooks URL값으로 넣는다.

Slack Apps -> Incoming WebHooks

특정 Github event에 대해서 Webhook이 trigger 되게 지정할 수 있으니 지금과 같은 경우는 PR 관련된 event만 체크하면 된다.

3. Github Webhook payload를 AWS Lambda로 보낸다.

Lambda로 직접 요청을 보낼 수 없으니 API G/W를 통해 AWS Lambda를 호출시킨다.

 

4. AWS Lambda에서 Github Webhook payload를 Slack Message payload로 변환한다.

Python, Node.js, Go 등 편한 언어로 Lambda에서 Github Webhook payload를 Slack Message payload로 변환한다.

 

이때 Github username과 Slack ID를 매핑해서 mention을 해주면 이 포스팅의 핵심인 Github + Slack user mentioning 기능을 구현할 수 있다.

(Slack mention 기능은 Message payload에 <@slack id>를 통해 사용할 수 있다.)

 

- Github Webhook paylaod document

- Slack Message payload document

 

추가로 Slack Block Kit Builder를 통해 Message payload를 미리 보기 형식으로 만들어 볼 수 있다.

5. Message payload를 Slack Incoming Webhooks를 통해 Slack으로 보낸다.

6. Slack 채널에 PR, PR comment에 대한 알림이 온다.

나는 이런 식으로 PR comment 알림이 오도록 설정해봤다.

나의 Github username은 ivvve이고 Slack display name은 devson이다.

이런 식으로 mention 알림이 오도록 설정을 할 수 있다!

댓글