본문 바로가기
카테고리 없음

Github Actions, Slack 연동하여 Gradle 빌드 결과받기

by 노아론 2020. 1. 9.

이번 포스팅에서는 Github의 CI/CD 도구인 Github Actions 을 이용하여
Push, Pull request 같은 이벤트가 발생하면 Gradle 프로젝트를 빌드하고,결과를 Slack 메시지로 보내주는 방법에 대해 다룬다.

Github Actions은 무엇인가

GIthub Help 에 나와있는 소개는 다음과 같다.

Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized workflow.

자동화, 원하는대로 커스터마이즈를 하고 레포지토리에서 소프트웨어 개발 워크플로우를 실행해준다.
Travis CI, Jenkins와 같은 역할을 한다.


자신의 서버를 추가해서 Github Actions의 서버로도 사용이 가능하다.


Github에서 제공하는 서버 사용엔 당연히 최대 동시처리 가능 건수가 있다.
Github의 Free plan은 20개, 대학생들이 Educate Pack으로 받기도 하는 Pro Plan은 40개, Team plan은 60개, Enterprise는 180개이다.

Workflow 작성방법

Workflow syntax
YAML 문법으로 작성한다
하나씩 다 보기엔 벅차니 생략하고 아래에서 따라해보며 작성을 해본다.

시작하기

위 화면에 보이는 Action기능들 중에 GradleSet up this workflow 를 선택해보자

image

제공되는 Workflow를 이용하면 처음부터 작성할 필요 없이, 기본적인 코드를 제공해주고 있다.

위 workflow 코드의 구성은 push할때(브랜치 상관X) ubuntu의 최신버전에서 (빌드를 위해 JDK를 설치하고) ./gradlew build 를 실행하도록 되어있다.

 

여기서, 모든 브랜치에서 push할때가 아닌 특정 브랜치에서의 커밋 push에 대해서만 workflow를 실행시키고 싶다면
on.push.<branches> 구조를 지녀야 한다.

name: build-test

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1

    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: '1.8'
        java-package: jdk

    - name: Build with Gradle
      run: ./gradlew build

이와 같이 된다면 master브랜치에 push가 되었을때 수행되어진다.

이제 master에 커밋 push를 하고나서 Github Actions 결과를 지켜본다.


image

##[error]Process completed with exit code 126.

가 뜨고 실패하였다. ./gradlew Permision denied.
그렇다면 gradlew 에 대해서 권한설정을 해준다.

name: build-test

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1

    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: '1.8'
        java-package: jdk

    - name: Change gradlew permissions
      run: chmod +x ./gradlew

    - name: Build with Gradle
      run: ./gradlew build

이제 다시 결과를 확인해본다.


image

Build with Gradle 단계가 성공적으로 수행된 것을 볼 수 있다.

지금까지는 Github Actions 상에서의 Gradle 빌드 테스트하는 과정이었다.
빌드 테스트마다 Slack 을 통해 메세지를 받아보고자 한다.

Github 마켓플레이스의 Actions 항목에서 action-slack을 사용하여
슬랙으로 메세지를 전송해본다

- name: action-slack
  uses: 8a7/action-slack@v2.6.0

먼저 위의 내용을 yml파일에 추가해준다

    - name: action-slack
      uses: 8398a7/action-slack@v2.6.0
      with:
        status: ${{job.status}}
        author_name: <슬랙 챗봇 이름>
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # required
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required

기존 yml의 steps 마지막에 위 내용을 추가한다.

 

그리고 우리는 Slack 메신저에서 SLACK_WEBHOOK_URL 에 대해 얻고, 레포지토리의 secrets 에 등록해야 한다.

https://api.slack.com/apps 에 들어가 Create New App 을 눌러 앱 이름슬랙 워크스페이스 를 정해준다.

 

 

 

Add features and functionalityIncoming Webhooks 항목에 들어가
Add New Webhook to Workspace 를 눌러 웹훅을 새로 만든다.


image

알림을 받을 채널을 정해둔다


image

이렇게 하단에 Webhook URL이 나오게 된다. Copy를 눌러주자!

우리는 이제 이 URL을 깃헙 레포지토리의 Secrets 에 저장할 것이다


image

 

깃헙 레포지토리에서 Settings -> Secrets 로 들어가 Add a new secret 을 눌러 새로운 시크릿 정보를 추가하자

 

Name 항목에 SLACK_WEBHOOK_URL 을 넣고 Value 항목에 복사해두었던 Webhook Url을 입력한다

 

위와 같이 Secrets가 등록되었으면 새롭게 커밋을 푸쉬하여 결과를 확인해본다

 

 

image

 

지금까지 잘 설정되었다면 슬랙을 통해 위와 같은 형태로 Github Actions의 결과를 받을 수 있게 된다.

 

 

이상으로 포스팅을 마친다.

CI/CD 작업, 깃헙 액션을 활용하는 방법에 대해 앞으로 간간히 포스팅 해보고자 한다.

댓글