본문 바로가기
Infra Settings/Github Action

GitHub Action - 2 (실습)

by 완두완두콩 2022. 1. 19.

이전의 GitHub Action -1 에서 GitHub Action 이란 무엇인가와 그와 연관된 개념에 대해 알아보았다.

이번 시간에는 GitHub Action 을 이용한 실습을 진행해 볼 예정이다.

 

https://dodokong.tistory.com/entry/GitHub-Action-1-%EA%B0%9C%EB%85%90

 

실습


Workflow 를 생성하는 방법이다. 우선 임의의 프로젝트를 하나 정하고 (없다면 생성) 프로젝트 최 상단에 다음과 같이 

디렉토리를 생성한다.

.github/workflows/deploy.yml 

yml 파일의 이름은 변경해도 상관 없다.

.github 디렉토리의 모양이 다르다면 settings -> Plugins -> Extra Icons 를 설치하면 된다.

 

deploy.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
name: learn-git-hub-action
 
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  workflow_dispatch: # (2) 수동 실행
 
jobs:
  build:
    runs-on: ubuntu-latest # (3)
 
    steps:
      - name: Checkout
        uses: actions/checkout@v2 # (4)
 
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1 # (5)
        with:
          java-version: 1.8
 
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew # (6)
        shell: bash
 
      - name: Build with Gradle
        run: ./gradlew clean build # (7)
        shell: bash
 
      - name: Get current time
        uses: 1466587594/get-current-time@v2
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss
          utcOffset: "+09:00"
 
      - name: Show Current Time
        run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
        shell: bash
 
      - name: run test
        run: ./gradlew test
 
      - name: run build
        run: ./gradlew clean build -x test
cs

 

master 브랜치에 Push 와 Pull Request 작업이 들어오는 경우 실행되게 된다.

jobs : build : runs-on : ubuntu-latest : 해당 Github Action 스크립트가 작동될 OS 환경을 지정한다.

uses : actions/setup-java : Github Action이 실행될 OS에 Java를 설치합니다

아래 부분은 gradle 을 통해 build 할 수 있는 권한을 주고 , gradle 을 통해 build 를 실행하는 코드입니다.

 

- name: run test
  run: ./gradlew test

- name: run build
  run: ./gradlew clean build -x test

이 두 부분은 , test 에서 에러가 나는지 , build 에서 에러가 나는지 확인하는 부분이다.

 

위의 세팅을 완료했으면 수정 사항을 원격 저장소에 push 한 후 , github 에 접속한다.

Actions 에 들어가면 다음과 같은 workflow 들이 보이고 해당 workflow 를 클릭하면 build 가 진행된다.

이상이 없다면 다음과 같이 build 가 성공적으로 진행되게 된다.

(언제 수정됐는지를 알기 위해 name : Get Current Time , name : Show Current Time 을 추가하였다.)

코드를 수정해서 push 하게 되면 자동으로 workflow 가 run 하게 되며 build 된다.

 

 


오류 : 테스트케이스만 추가하면 gradle 을 build 하던 도중 , 다음과 같은 오류가 발생하였다.

처음에는 테스트케이스를 Junit 5 로 작성해서 생긴 오류인줄 알고 Junit 4 로 바꾸었지만 그럼에도 오류 발생

스프링부트와 버전 차이 때문에 생기는 문제인 줄 알고 , gradle 에 아래 부분을 작성해주었으나 그럼에도 오류 발생

testImplementation("org.junit.vintage:junit-vintage-engine") {
   exclude group: "org.hamcrest", module: "hamcrest-core"
}

하단에 두 항목이 모두 hibernate exception 이 발생했기에 해당 항목을 찾아보니 현재 내 h2 DB 에는 테이블만 있을뿐  , 저장된 값이 없기 떄문에 이런 오류가 발생하고 있었다. 추후 mySql 로 연동하게 되는 경우 ,아래 코드로 사용한다.

 
- name: Setup MySQL
 uses: samin/mysql-action@v1
 with:
  character set server: 'utf8'
  mysql database: '테스트에 사용할 db이름'
  mysql user: '유저 이름'
  mysql password: ${{ secrets.MYSQL_PASSWORD }} # github Secret 탭에서 설정하세요!

 더 자세한 내용은 하단 참고

https://github.com/marketplace/actions/start-mysql

 

Start MySQL - GitHub Marketplace

Start a MySQL database

github.com

 

'Infra Settings > Github Action' 카테고리의 다른 글

GitHub Action - 1 (개념)  (0) 2022.01.18

댓글