매일 Github 계정의 커밋 여부를 확인해주는 Slack 봇입니다. 개인의 Github Commit 상태를 매일 조회하거나 모임에서 여러명의 Commit 상태를 확인할 때 사용하기 좋습니다.
이 서비스는 AWS Lambda에 최적화 되어있습니다.
Python 3.7을 사용했습니다.
Github의 Commit 정보를 가져오기 위해서 아래의 항목을 체크한 뒤 Token을 발행합니다.
- [Github User의 Settings 메뉴] Developer settings > Personal access tokens
- repo
- repo:status
- user
- read:user
- repo
- 새로운 Slack Bot을 생성합니다.
- Slack Bot 설정의 Features > OAuth & Permissions를 통해 토큰을 발행합니다.
- 추가해야할 Bot Token Scopes 목록
- [channels:manage, chat:write, users:read]
-
코드를 동작시키기 위한 모듈들을 AWS의 Lamda 함수의 Layers에 추가해야 합니다. 아래의 명령어를 입력하여 python 패키지를 만들고 이를 zip 파일로 압축하여 Layers에 추가합니다.
pip install -r requirements.txt -t python
zip 파일의 구조는 다음과 같아야 합니다.
slackbot.zip
+---python
| +---package_name
| +---package_name.dist-info
-
userinfo.csv 파일에는 github와 slack 정보가 들어있습니다.
- userinfo.csv 파일내의 데이터 구조는 다음과 같습니다.
user1_github_token,user1_github_username,user1_slack_name user2_github_token,user2_github_username,user2_slack_name
- userinfo.csv 파일내의 데이터 구조는 다음과 같습니다.
-
AWS Lambda 함수의 환경 변수 2가지를 추가합니다.
키 값 SLACK_BOT 봇1, 봇2, 봇3 SLACK_BOT_TOKEN 슬랙봇 토큰 입력 SLACK_BOT
은 slack_user_list API를 통해 Bot 정보들을 확인할 수 있습니다.SLACK_BOT_TOKEN
은 Slack에서 사용할 봇의 토큰입니다.
Github의 커밋 여부를 확인하기 위해 다음과 같은 쿼리를 사용했습니다.
query{
user(login: :git_user_name:) {
contributionsCollection(from: yyyy-MM-ddT00:00:00, to: yyyy-MM-ddT00:00:00) {
totalCommitContributions
}
}
}
시간은 모두 당일 같은 날을 입력하였습니다.
쿼리의 실행 결과는 GitHub GraphQL API v4 Explorer를 통해 확인할 수 있습니다.
AWS CloudWatch Event Docs를 참고하여 이벤트를 생성하였습니다.
- CloudWatch > 이벤트 > 규칙 > 규칙 생성으로 규칙을 생성합니다.
- 이벤트 소스는 일정으로 선택하고 Cron 표현식을 선택하여 규칙을 입력합니다.
- 대상에서 Lambda를 통해 만든 함수를 추가한 뒤 세부 정보 구성을 누릅니다.
- 세부 정보 구성에서 원하는 정보를 입력한 뒤 규칙을 생성합니다.
Cron의 시간이 GMT 시간 기준이므로 이에 맞춰 Cron 표현식을 입력해주었습니다.