GitHub Actions를 활용한 Discord 알림 자동화
들어가며
친구와 프로젝트를 진행하면서 생산성에 영향을 미치는 문제를 발견했습니다.
야근 등 일정에 의해 주기적인 회의가 불가능하다.
회의가 늘어지면 집중력이 떨어진다.
그래서 고민하던 차에, 예전에 Jenkins와 Mattermost를 활용해 빌드 성공 알림을 보낸 기억이 떠올랐습니다. 커밋을 구체적으로 작성하고 이를 자동으로 디스코드에 알린다면 작업한 내용을 쉽게 공유하고, 이를 바탕으로 효율적으로 회의 및 프로젝트 진행이 가능할 것이라 생각했습니다.
하지만, 이 프로젝트 하나를 위해 안쓰던 프로그램을 따로 사용하는 건 너무 비효율적입니다. 그러다 평소 회의때 사용하던 디스코드가 떠올랐습니다.
MatterMost에서 알림 자동화 기능을 구현한 적이 있다.
디스코드와 Mattermost의 기능은 비슷하다.
디스코드에서도 가능할 것이다?
라는 다소 비약적인 논리로, 방법을 찾아보기 시작하였습니다. 그러다 디스코드 Webhook과 GitHub Actions를 알게 되었고, 이를 활용해 Push 알림 자동화 기능을 구현하고자 하였습니다.
동작 원리
GitHub Actions
GitHub Actions는 워크플로우 자동화 도구로, 이벤트가 발생하면 파일에 정의된 작업을 자동으로 실행합니다.
Webhook
Webhook은 특정 이벤트가 발생했을 때 HTTP POST 요청을 사용해 데이터를 전송합니다.
이를 종합하면 다음과 같습니다.
리포지토리에 Push 시 GitHub Actions에서 이벤트를 감지해 JSON 데이터를 생성합니다.
해당 Webhook URL로 HTTP POST 요청을 전송합니다.
Discord 서버는 전달받은 데이터를 기반으로 메시지를 생성한 후, Discord 채널에 출력합니다.
과정
디스코드 Webhook URL 생성
디스코드 서버에서 알림을 보낼 채널을 선택합니다.
채널 편집 → 연동 → 웹후크 → 새 웹후크를 클릭해 웹후크를 만들고, URL를 복사합니다.
GitHub Secrets 추가
GitHub 리포지토리 → Settings → Secrets and variables → Actions로 이동합니다
새 Secret 추가 →
DISCORD_WEBHOOK_URL
이름으로 URL을 저장합니다.
GitHub Workflow 작성
프로젝트 루트 디렉토리 아래
./github/workflows
폴더를 생성합니다.Workflow yml 파일을 작성 후,
notify-discord.yml
로 저장합니다.
코드
name: Notify Discord on Push # 워크플로우 이름
on:
push:
branches:
- main # 브랜치에 푸시가 발생할 때 트리거
workflow_dispatch: # 수동 워크플로우 실행 옵션
jobs:
discord_notification:
runs-on: ubuntu-latest
steps:
- name: Set up environment variables # 환경 변수 설정
run: |
# 현재 브랜치 이름
echo "GITHUB_REF_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
# 푸시된 커밋 메시지
echo "GITHUB_COMMIT_MESSAGE=${{ github.event.head_commit.message }}" >> $GITHUB_ENV
# 커밋 작성자 이름
echo "GITHUB_ACTOR=${GITHUB_ACTOR}" >> $GITHUB_ENV
# 커밋 링크
echo "GITHUB_COMMIT_URL=${{ github.event.head_commit.url }}" >> $GITHUB_ENV
- name: Send notification to Discord # Discord Notify
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: |
# Discord Webhook API를 활용한 메시지 전송
curl -H "Content-Type: application/json" \
-X POST \
-d '{
"username": "GitHub Bot",
"avatar_url": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
"embeds": [
{
"title": "푸시 알림",
"color": 3381759,
"thumbnail": {
"url": "https://i.postimg.cc/SNQjYtv8/vt-logo.png"
},
"fields": [
{
"name": "브랜치",
"value": "'"$GITHUB_REF_NAME"'",
"inline": true
},
{
"name": "커밋 작성자",
"value": "'"$GITHUB_ACTOR"'",
"inline": true
},
{
"name": "커밋 메시지",
"value": "'"$GITHUB_COMMIT_MESSAGE"'",
"inline": false
},
{
"name": "커밋 링크",
"value": "[변경 사항]('"$GITHUB_COMMIT_URL"')",
"inline": false
}
],
"footer": {
"text": "GitHub Actions - 자동 알림"
},
"timestamp": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'"
}
]
}' \
$DISCORD_WEBHOOK_URL
실행 결과
결론
Push 알림 자동화를 통해 회의를 하지 않더라도, 작업 내용을 빠르게 공유할 수 있었습니다. 이로 인해 회의 시간을 절반 이하로 줄이고, 생산성을 향상시킬 수 있었습니다.
또한 GitHub Actions를 활용한다면 Push 외에도 이슈 상태 변경, 배포 알림 등 GitHub에서 발생할 수 있는 다양한 상황에 활용이 가능합니다.
Subscribe to my newsletter
Read articles from Jaeho Cha directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by