Github actions와 slack 연동해서 알림받기

sdb016·2021년 10월 2일
1
post-thumbnail

Action-Slack

Github actions를 이용하여 빌드 결과를 알림으로 받을 수 있다.
텔레그램이나 Slack등 다양한 방식으로 알림을 받을 수 있다.
그 중 업무적으로 가장 많이 사용하는 메신저인 Slack과 연동하여 빌드 결과를 알림받을 수 있도록 해보겠다.

Action-Slack 을 이용하여 손쉽게 연동할 수 있다. 공식 사이트에 들어가면 usage나 fields를 확인할 수 있다.

Slack webhook url 발급

먼저 Slack api에 들어가서 create new app을 누르고, 본인이 원하는 App Name, development slack workspace를 선택해서 새로운 앱을 만들어준다.

그러면 위와 같은 페이지가 나온다.
이 중 Incoming Webhooks를 클릭하여 활성화시킨다. 그 후 Add New Webhook to workspace를 클릭하여 slack에 내가 원하는 채널과 연동시킨다.

Allow를 클릭하면 Webhook URL이 발급되는데 이 값을 Github의 secrets에 환경변수로 추가할 것이다.

Github 환경변수 추가


깃허브 프로젝트의 Settings/secret 탭으로 가서 오른쪽 상단에 New repository secret를 클릭하여 환경변수를 추가한다.

Name에는 SLACK_WEBHOOK_URL(또는 원하는 환경변수 이름)을 넣고 Value에 아까 복사한 Webhook URL값을 넣은 후 환경변수를 추가한다.

yml 파일 작성

방법 1: 경로에 yml파일 직접 작성

이제 workflow를 만들기 위해 yml파일을 작성할 것이다.
yml파일의 경로는 .github/workflows/아래에 (원하는 이름).yml이라는 이름의 파일을 작성하면 된다.

방법 2: Actions 탭으로 이동 후 작성

다른 방법으로는 프로젝트 탭 중 Actions탭을 선택한 후 new workflow버튼을 클릭하면 아래와 같은 화면이 나온다.

여기서 set up a workflow yourself -> 링크를 클릭한다.

그럼 위와 같이 yml파일을 작성할 수 있는데 마찬가지로 (원하는 이름).yml을 입력 후 에디터에 yml파일 내용을 작성하면 된다.

파일 작성

name: Slack alert for dev branch

on:
  push:
    branches:
      - dev
      - feature/*

  pull_request:
    branches:
      - dev
      - feature/*

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'

      - name: action-slack
        uses: 8398a7/action-slack@v3
        with:
          status: ${{ job.status }}
          author_name: Sloth Backend - dev
          fields: repo,commit,message,author # action,eventName,ref,workflow,job,took 추가할 수 있음
          mention: here
          if_mention: failure,cancelled
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
        if: always() # Pick up events even if the job fails or is canceled.

위와 같이 파일의 내용을 작성해주면 되는데 대략적인 내용을 살펴보면 다음과 같다.
먼저 이 workflow의 이름을 가장 상단에 적어준다.

on:
  push:
    branches:
      - dev
      - feature/*

  pull_request:
    branches:
      - dev
      - feature/*

on 아래에는 어떤 동작이 어느 브랜치에서 발생했을 때 이 workflow가 실행될 지 설정해준다. 위의 예시의 경우 dev브랜치와 feature 아래에 있는 브랜치에서 push, pull_request가 발생했을 때 실행되도록 하고 있다.

jobs:
 build:

   runs-on: ubuntu-latest

   steps:
     - uses: actions/checkout@v2
     - name: Set up JDK 11
       uses: actions/setup-java@v2
       with:
         java-version: '11'
         distribution: 'adopt'
         
     - name: action-slack
       uses: 8398a7/action-slack@v3
       with:
         status: ${{ job.status }}
         author_name: Sloth Backend - dev
         fields: repo,commit,message,author # action,eventName,ref,workflow,job,took 추가할 수 있음
         mention: here
         if_mention: failure,cancelled
       env:
         SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
       if: always() # Pick up events even if the job fails or is canceled.

jobs에는 실제 동작할 명령들을 적는다.

  • workflow는 여러개의 Job으로 구성된다.
  • 여러 job이 있을 경우, 병렬 실행을 기본으로 한다.
  • 위 파일은 build라는 job을 생성하고, 그 아래에는 2개의 step이 존재한다.
  • runs-on은 어떤 OS에서 실행될지 지정한다.
  • step의 uses는 다른 사람이 이미 만들어 놓은 action을 사용할 때 지정한다. 위의 경우 8398a7/action-slack을 사용한다.

실행


설정을 마치고 지정한 브랜치에서 지정한 액션이 일어났을 때 위와 같이 자동으로 actions가 실행된다.


slack에 내가 지정한 채널로 들어가보면 내가 선택한 field 옵션의 정보들에 대한 알림이 오는 것을 볼 수 있다.

profile
멋있는 백엔드 개발자

0개의 댓글