본문 바로가기
개발 이론/CI CD

Github Actions CI 자동 빌드 및 테스트 하기

by dal_been 2023. 12. 31.
728x90

협업프로젝트 마지막 주에는 배포를 해야하는데.... 아는게 하나도 없어서 하나씩 공부중이다...

 

그래도 개인적으로 기본적 토대는

CI는 GitHub Actions로 하고 CD는 Jenkins를 통해 할 계획이다.

물론 AWS로 배포할 것이다.

 

그래서 오늘은 GitHub Actions로 빌드및 테스트하는 방법을 말할 것이다

 

CI/CD가 일단 뭔데?

 

CI는 여러 개발자가 하나의 프로젝트에 같이 개발하게된다. 이때 발생하는 불일치를 최소화해주는 개념이다.

애플리케이션 변경 사항 반영할때 자동으로 빌드 및 테스트 되어 만약 테스트가 실패하거나 잘못된 코드가 있으면 공유되는 걸 방지한다.

 

CD는 지속적 배포로 프로젝트의 변경사항을 가상환경에 자동으로 배포하는 것이다.

 

간단하게 말하자면 자동빌드 및 테스트 통해 코드에 대한 신뢰성을 높이고 배포를 자동화하는 개념이다

 

 

Github Actions

 

 CI/CD툴 중 하나이다. build,test,deploy까지 가능하다.

예를 들어 Pull Request를 올리면 자동으로 해당 코드의 테스트를 수행하고 main브랜치로 코드를 push하면 자동으로 배포하는 등 여러가지 작업을 자동으로 수행해준다.

 

물론 Jenkins, Travis Ci등 다른 후보들도 있지만 개인적으로 CI는 Github Actions를 이용 할것이다. 

 

 

Github Actions 자동 빌드 및 테스트 하는 방법

 

Pull request를 올리면 자동으로 빌드 및 테스트를 수행하여 코드를 검사한다.

 

초기 세팅

 

CI하고 싶은 레포지토리에서 Actions탭으로 들어가면 새로운 workflow를 추가할 수 있다.

나 같은 경우 java+gradle를 이용했기 때문에 해당 Configure를 선택했다. 선택하게 되면 기본적으로 gradle.yml파일이 생성된다

 

 

.github/workflows로 들어가보면 gradle.yml이 보일것이다.

 

 

gradle.yml파일에 들어가면 기본적으로 구성되어있다.

name: Java CI with Gradle

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

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Build with Gradle
      uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
      with:
        arguments: build

 

여기서 크게 신경써야할 부분은 on과 jobs부분이다.

on은 워크플로우를 수행할 이벤트를 결정한다.

즉 위 코드는 main을 베이스 브랜치로 한 pull Request를 생성하였을때 수행된다는 뜻이다

jobs에서는 수행할 워크플로우를 차례대로 입력하면 된다.

 

 

Pull Request 작성

PR를 하면 자동으로 Github Actions가 동작하여 빌드를 싱행한다.

 

성공하면 이렇게 뜨게 된다

 

만약 workflow 실패하게되면 Github Actions가 실패했다고 알려준다

 

 

내가 마주친  fail

일단 Actions탭에 들어가면 내가 실패한 workflow들을 쫘르를 볼 수 있다.

 

1. gradlew is not executable.

 

원인은 Gradle 스크립트 파일인 gradlew에 대한 실행권한이 없어서 발생하는 에러이다.

그래서 찾아보니 gradle.yml에 이부분을 추가하면 성공이다

 

    - name: Run chmod to make gradlew executable
      run: chmod +x ./gradlew
      
    - name: Build with Gradle
      uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
      with:
        arguments: build

 

name Builde with Gradle은 원래 있었는데 이거 이전에 위의 Run chmod to make gradlew executable을 붙여줘야한다.

그 이유는 gradle을 실행하기전에 권한 부여를 해야해서 그런것 같다

(밑에다 추가적으로 붙이니 executable 에러 또 나왓다)

 

 

2. test 실패

 

actions는 실패하면 "Details"를 클릭하면 왜 실패했는지 알려준다.

그래서 보니까 test코드가 실패했다... 사실 지금 아주 가벼운 깃 레포를 테스트 중이라 내가 쓴 테스트 코드가 아니라서 다 삭제하고 진행했다.

 

다만 여기서 진짜 CI를 하시는 분들은 테스트 코드가 실했으니 테스트코드를 실패원인을 분석하고 다시 commit push 하기를 바란다.

 


일단 급하게 ci/cd를 공부해야했기 때문에 GitHub Actions에 대해서 자세하게 설명하지 않았다. 다음 블로그 게시글에 설명할 예정이다

'개발 이론 > CI CD' 카테고리의 다른 글

GitHub Actions 공부해보기  (0) 2023.12.31