본문 바로가기

Infra/CI & CD

[Github Actions] 깃허브 커밋 시 구글챗에 알림 전송하기

개요

회사에서 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 }}"

 

 

 

 

 

반응형