본문 바로가기
프로그래밍 개발/DevOps

DeveOps - 깃허브 액션 GitHub Actions 적용해보기 (feat. Slack)

by Jinseok Kim 2023. 8. 25.
반응형

깃 액션 GitHub Actions 활용해보기

 

 

GitHub Actions는 CI/CD와 같은 workflow를 자동화 할 수 있는 도구라고 설명되어 있는데, 쉽게 말해 GitHub 내 어떤 이벤트(push, pull, merge ...)가 발생하면 해당 이벤트에 대해 정해진 동작을 실행하게 하는 도구입니다.

 

GitHub Actions에는 event, trigger, job, step, uses, name ... 등 여러가지 키워드들이 있습니다.

 

지금 운영중인 저희 서비스 프로젝트 개발 환경에도 GitHub Actions을 활용하여 Slack 팀 메신저와 연동시킨 환경에서 개발을 진행 하고 있습니다.

개발팀으로서 협엽 상황이라면 CI/CD 구축은 필수라고 생각하고 있습니다. GitHub Actions의 필요성과 개발팀 협력과 관련하여 예를 들자면 개발을 하다가 혹은 이슈의 원인을 찾을때 등등 언제든로그 정보가 필요할지 모르기 때문이죠.

 

 

 

 

 

 

 

 

GitHub Actions 기능을 Slack에 연동시켜보기


 

GitHub Actions은 많은 종류의 메신저에 연동시킬수 있습니다. 그 중 많은 회사에서 쓰고 있는 메신저 Slack을 예를 들어 연동 과정을 기록하려 합니다.

 

 

 

 

1. GitHub 프로젝트 생성

GitHub에 개인 repository 하나를 만들고, 해당 repository에 프로젝트를 push합니다.

저는 요즘 개발중인 이력서 페이지 프로젝트를 예시로 기록하겠습니다.

 

 

 

 

 

2.  /github/workflows 폴더 생성 및 yml 파일 추가

 

 

위와 같이 깃허브 액션을 적용하려는 저장소 프로젝트의 루트 디렉토리에 ./github/workflows폴더 생성 및 yml 파일 추가합니다.

 

저는 Slack에 푸시 알림을 연동하였기때문에 yml 파일명을 slack-notify라고 붙였습니다.

 

 

 

3. Slack 채널 연동 세팅

우선 알림을 받으려고 하는 채널을 생성합니다.

 

 

 

그리고 아래에 있는 "앱 추가" 버튼을 누릅니다.

 

 

 

"GitHub"를 추가합니다.

 

 

 

 

그 다음은 채널 우클릭 -> 채널 세부정보 보기 -> 통합 -> 앱 에서 앱 추가를 합니다. -> GitHub를 추가하시면 됩니다.

 

 

 

 

 

 

그러면 해당 채널에서 위 메시지를 확인할 수 있습니다.

 

 

 

 

 

 

/github signin 명령어를 치면 GitHub에 연결할 수 있도록 메시지가 전송됩니다.

버튼을 눌러서 연결할 수 있고, Verification Code를 받으면 위 사진에 있는 Enter code에 입력하면 연동되는 것을 확인할 수 있습니다.

 

 

 

 

 

 

이제 Git-Actions을 Slack에 연동을 하겠습니다.

 

Slack API: Applications | Slack

Your Apps Don't see an app you're looking for? Sign in to another workspace.

 

먼저 위 링크를 타고 가서 Create New App 버튼으로 앱을 생성합니다.

 

 

 

 

 

 

그리고 Settings -> Basic Information -> Add features and functionality에서 Incoming Webhooks를 누르고 활성화합니다.

 

 

 

 

 

그 다음 아래에서 Add New Webhook to Workspace 버튼으로 워크스페이스와 채널에 연결합니다.

그러면 이렇게 Webhook URL을 받을 수 있습니다. 이거를 GitHub의 secrets에 넣어줍니다.

 

 

GitHub -> Settings -> Security -> Secrets and variables -> Actions에 들어가셔서 New repository secret 버튼으로 발급 받은 Webhook URL을 넣어줍니다.

 

 

 

이렇게 등록되어야 합니다.

 

 

 

 

 

 

 

4.  yml 파일에 명령어 작성

name: Slack alert

on:
  push:
    branches:
      - main
      - develop
      - feature/*

  pull_request:
    branches:
      - main
      - develop
      - 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: ${{ steps.get_author_name.outputs.author_name }}
          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.

 

위와같이 저는 작성하여 Slack에 연동하였습니다.

 

  1. name: workflow의 이름입니다. Workflow의 이름이다. 위 사진의 좌측을 보면 All workflows 밑에 Java CI with Gradle의 workflow가 있는 것을 볼 수 있습니다.
  2. on: workflow가 실행될 조건을 명시합니다. 보통 push나 pull request를 등록하며, 저는 pull request만 작성했습니다. 
  3. jobs: 실행되는 명령어들을 작성합니다. 여기서 secrets에 등록한 SLACK_WEBHOOK_URL을 사용합니다. 그 외 파라미터나 필드 등 설명은 https://action-slack.netlify.app/ 여기서 확인해주시거나 아래 레퍼런스에서 확인해주시면 되겠습니다.
    1. 이벤트가 발생하는 경우 jobs가 동작합니다. 
    2. 먼저 runs-on로 The type of machine을 정합니다. (예: Windows, Ubuntu, macOS...)
    3. 그리고 steps이라는 일련의 작업을 가지고 있으며 각 단계별로 동작한다. 위 예시로 JDK, Gradlew 권한 설정 후 빌드합니다.

 

 

action-slack

 

action-slack.netlify.app

 

 

 

 

 

 

5.  Action 이벤트 발생 및 연동 확인 테스트 하기

 

이제 세팅이 끝났으니 세팅한 프로젝트의 저장소에 Push를 해봅니다.

 

 

이제 저장소에 Push 할때마다 이렇게 Slack 알럿이 옵니다.

더 안정적이게 로그를 남기며 팀 프로젝트일때 매우 효율적으로 프로젝트 개발을 하게 되었습니다.

 

 

 

감사합니다

반응형

댓글