자동 빌드 및 테스트(CI, Continuous Integration)

업데이트 한 버전을 자동으로 빌드 및 테스트 하는 것 CI라고 한다.

 

협업 시 대부분 Git, GitHub을 통해 버전 관리를 할텐데, GitHub에 올리는 버전은 모든 팀원이 공유를 한다.

버전 업데이트 시 제대로 테스트가 통과하는지 확인하고 GitHub에 올려야 팀원들이 Pull 받고 오류가 발생하지 않을것이다.

따라서 GitHub에 푸시 전에 일일이 빌드도 해보고 테스트도 제대로 통과하는지 확인하고 버전을 업데이트 해야 한다.

하지만 사람이 하는 작업인지라 아무래도 빠르게 처리하고 다른거 하고싶다는 생각도 들기도 하고,

버전 업데이트마다 매번 해야하는 반복적인 작업이므로 깜빡 잊어버리고 테스트를 생략하고 PR을 올릴 수가 있다.

이런 반복적인 작업을 자동화하면 휴먼 에러를 방지할 수 있지 않을까?


1. Github Actions로 자동 빌드 및 테스트

우선은 간단한 CI부터 진행해보자.

CI를 지원하는 툴은 GitHub Actions, Jenkins, Travis CI 등 여러가지가 있다.

이 중에서 본인은 깃헙 액션을 이용하려고 한다.

프로젝트 버전 관리는 GitHub으로 관리하기 때문에 깃헙 액션을 이용한다면 워크 플로우를 작성하면 CI를 지원해준다.

 

PR을 올리면 자동으로 빌드 및 테스트가 되는 깃헙액션 워크 플로우를 작성해보자.

1-1. Secret 작성

application.yml 파일에는 민감한 환경 변수들이 담겨있을 수 있다.

따라서 깃헙 레포에는 애플리케이션에 필요한 yml 파일을 올리지 않는다.

하지만 빌드나 테스트를 할때는 이 application.yml 파일이 필요하다.

따라서 레포에는 드러나지 않지만 내부적으로 환경변수를 설정해주는 Secret을 사용한다.

아래 사진처럼 Secret에 application.yml 파일을 설정한다.

본인은 PROPERTIES 라는 이름으로 application.yml 내용을 Secret에 설정해뒀다.

이제 아래 깃헙액션 워크플로우에서 여기서 설정한 Secret을 바탕으로 빌드 시 application.yml 파일을 생성한다.

1-2. yml파일로 워크플로우 작성

아래처럼 yml로 워크플로우를 작성한다.

이 때 디렉토리 경로는 아래처럼 .github/workflows 여야 한다.yml 파일명은 뭘로 하든 상관 없다.

본인이 작성한 main.yml 파일은 아래와 같다.

name: Java CI with Gradle

on:
  pull_request:
    branches: [ "main" ]    # main 브랜치에 PR 했을때 실행(PR이 merge 될 때는 동작하지 않음)

jobs:
  build:

    runs-on: ubuntu-latest  # ubuntu 환경에서 실행

    steps:
    - uses: actions/checkout@v4
    
    ## Java 17 사용
    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'  

    ## application.yml 파일 생성
    - name: make application.yml
      run: |
        echo ">> mkdir & touch"
        mkdir -p ./src/main/resources
        cd ./src/main/resources
        touch ./application.yml
        echo ">> copy application.yml"
        echo "${{ secrets.PROPERTIES }}" >> ./application.yml
        
    ## Gradle에 권한 부여
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
      shell: bash

    ## Gradle build 실행(gradle의 build 과정에 test가 포함돼 있음)
    - name: Build with Gradle Wrapper
      run: ./gradlew build
      shell: bash

2. 결과 확인

아래처럼 다른 브랜치에서 main 브랜치에 PR을 올리면 빌드 테스트를 하는걸 확인할 수 있다.

+ Recent posts