개요
회사에서 Git 을 쓰고있는데
다른 팀원이 특정 브런치에 푸시하거나 PR 생성될 경우 메일이 오기는 하는데
메일은 확인을 잘 안 하기도 하고, 보기가 불편해서
회사에서 메신저로 사용중인 "구글 챗((Google Chat) 으로 알림을 보낼 수 있지 않을까" 라는 생각에 찾아보니
깃허브 액션과 웹훅을 사용하는 방법이 있어서 실제로 구현 후에 서비스하고 블로그에 포스팅으로 남기게 되었다.
Slack 도 사용하기는 하는데 잘 사용하지 않다보니 일단 구글챗으로만 알림을 보내는 기능을 만들었다.
추후 Slack 에 알림 보내는 방법도 포스팅 예정이다.
웹훅(Webhook)이란?
- 특정 이벤트가 발생하였을 때 타 서비스나 응용프로그램으로 알림을 보내는 기능
차례대로 방법을 설명하겠다.
1. 구글 챗 에서 채팅방(스페이스)를 하나 만든 후 웹훅을 추가한다. (기존 스페이스에도 추가 가능)
* 웹훅은 일반 구글계정에서는 추가가 안되고, 조직 단위의 계정에서만 가능하다.
1-(1) .스페이스로 들어간 후, 상단의 스페이스명 선택 후 [앱 및 통합] 을 선택한다.
1-(2). 웹훅 추가 버튼을 클릭한다.
1-(3). 웹훅의 이름과 아바타 URL 을 설정한다.
1-(4). 웹훅이 추가된 모습
1-(5). 웹훅 우측 더보기 버튼을 클릭해서 링크를 복사한다.
2. GitHub 에서 구글 챗 채팅방으로 알림을 보내는 Actions 를 만든다.
2-(1). 깃허브 레포지토리에 들어가서 Settings 에 들어간다.
2-(2). Security - Secrets and variables - Actions 탭으로 들어간 후 , [New repository secret] 버튼을 클릭한다.
2-(3). Name 은 각자 하고 싶은대로 해도 되고, Secret 에는 아까 구글챗에서 웹훅 추가후 URL 복사한 값을 붙여넣는다.
2-(4). Actions 탭 선택을 하면 다양한 템플릿이 나오는데 [set up a workflow yourself] 를 선택한다.
2-(5). yml 파일명을 설정하고, 코드 부분에는 아래 코드를 복사 붙여넣기 한 후 [Commit changes] 버튼을 클릭한다.
develop 브랜치에 푸시가 되면 아까 웹훅을 추가한 구글챗 채팅방에 알림이 전송되는 형식이다.
알림 메시지 형식은 다양하게 정할 수 있겠으나, 나는 일단 누가 푸시했는지와 커밋메시지, 발생 시각을 전송하도록 했다.
google-chat-alert.yml
name: Deploy ## 21
on:
workflow_dispatch: # 이 워크플로우는 수동으로 트리거할 수 있습니다.
push:
branches:
- develop # 'develop' 브랜치에 푸시될 때 워크플로우가 트리거됩니다.
concurrency:
group: deploy-group
cancel-in-progress: true
jobs:
deploy:
runs-on: ubuntu-latest # 워크플로우가 실행될 GitHub Actions 러너의 OS를 지정합니다.
steps:
- name: Checkout Code
uses: actions/checkout@v2 # 리포지토리의 코드를 체크아웃합니다.
- name: Notify Google Chat on Push Start
run: |
# 푸시에서 커밋 메시지와 작성자 정보 가져오기
COMMIT_MESSAGE=$(git log --format=%B -n 1 ${{ github.sha }})
COMMIT_AUTHOR=$(git log --format=%an -n 1 ${{ github.sha }})
COMMIT_USER_LOGIN="${{ github.event.sender.login }}"
# GitHub Actions의 시간은 UTC로 제공되므로, Asia/Seoul로 변환
CURRENT_TIME_KST=$(TZ="Asia/Seoul" date '+%Y-%m-%d %H:%M:%S')
curl -X POST \
-H 'Content-Type: application/json' \
-d "{\"text\": \"🐬 [google-chat-test]\n\n${COMMIT_AUTHOR}(${COMMIT_USER_LOGIN}) 님이 Push 하였습니다. 배포를 시작합니다.\n\n- 커밋 메시지: ${COMMIT_MESSAGE}\n- 시각: ${CURRENT_TIME_KST}\"}" \
"${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}"
이제 실제로 테스트를 해보자.
develop 브랜치를 하나 생성 후, 간단하게 README.md 파일을 수정 후 커밋을 했다.
알림이 잘 오는 것을 확인할 수 있다.
GItHub Actions 으로 CI/CD 를 구축한 상황이라면
서버에 실제로 배포가 모두 완료되었을 때 알림을 전송할 수도 있다.
yml 파일에서 최초에 푸시 알림을 한 번 보내고,
이후 aws 서버에 배포하는 작업을 하고 난 후,
그 밑에 아래 코드를 작성하면. 해당 액션이 성공적으로 끝났을 때(배포가 끝났을 때) 알림이 전송된다.
- name: Notify Google Chat on Deploy Success
if: success()
run: |
# GitHub Actions의 시간은 UTC로 제공되므로, Asia/Seoul로 변환
CURRENT_TIME_KST2=$(TZ="Asia/Seoul" date '+%Y-%m-%d %H:%M:%S')
curl -X POST \
-H 'Content-Type: application/json' \
-d "{\"text\": \"🐬 [google-chat-test]\n\n배포가 완료되었습니다.\n\n- 시각: ${CURRENT_TIME_KST2}\"}" \
"${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}"
'Infra > CI & CD' 카테고리의 다른 글
[Github Actions] 깃허브 Pull Request 생성 시 구글챗에 알림 전송하기 (0) | 2024.01.18 |
---|