이번 포스팅에서는 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기능들 중에 Gradle로 Set up this workflow 를 선택해보자
제공되는 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 결과를 지켜본다.
##[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
이제 다시 결과를 확인해본다.
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 functionality
의 Incoming Webhooks
항목에 들어가Add New Webhook to Workspace
를 눌러 웹훅을 새로 만든다.
알림을 받을 채널을 정해둔다
이렇게 하단에 Webhook URL이 나오게 된다. Copy를 눌러주자!
우리는 이제 이 URL을 깃헙 레포지토리의 Secrets 에 저장할 것이다
깃헙 레포지토리에서 Settings -> Secrets 로 들어가 Add a new secret 을 눌러 새로운 시크릿 정보를 추가하자
Name
항목에 SLACK_WEBHOOK_URL
을 넣고 Value
항목에 복사해두었던 Webhook Url을 입력한다
위와 같이 Secrets가 등록되었으면 새롭게 커밋을 푸쉬하여 결과를 확인해본다
지금까지 잘 설정되었다면 슬랙을 통해 위와 같은 형태로 Github Actions의 결과를 받을 수 있게 된다.
이상으로 포스팅을 마친다.
CI/CD 작업, 깃헙 액션을 활용하는 방법에 대해 앞으로 간간히 포스팅 해보고자 한다.
댓글