[러닝하이] Git Actions 테스트 자동화

수박이삼촌·2024년 3월 29일
0

러닝하이

목록 보기
6/11
post-thumbnail

📌 테스트 자동화 적용 이유

항상 저희 러닝하이팀은 테스트 코드를 작성하며 개발을 진행하려 노력하고 있습니다.

기능을 구현하다보면 다른 모듈에 영향을 끼치게 만들 수도 있습니다. 그러지 않기 위해 테스트 코드를 작성하고 있습니다!! 메소드가 완성되고 테스트 코드를 작성하면 전체 테스트는 실패하게 되는 경우도 있더라구요,,,ㅠ

게다가 구현되는 기능이 많아지면서 막대한 양의 테스트 코드가 생산되면서 일일히 확인하기가 어렵다는 점이 있었습니다,,, 그래서 찾은 방법이 PR를 작성하면 자동으로 테스트를 확인해주는 git actions를 활용한 테스트 자동화 입니다.

📌 적용 방법

러닝하이는 gradle로 프로젝트를 빌드하여 gradle 기준으로 정리하겠습니다.
깃허브 메인 레포지토리 - Action 탭 - Java With Gradle을 선택해주어 .github/workflow/gradle.yml를 만들어줍니다.

기본 설정에는 `main'브랜치에 테스트가 돌아가도록 되어 있어 각자의 git banch 전략에 맞추어 설정을 변경해주시면 됩니다. 저희는 dev 브랜치로 개발을 진행중이었으므로 변경하도록 하겠습니다.

name: Java CI with Gradle

on:
  pull_request:
    branches: [ "dev" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

      ## MySQL 환경을 테스트 환경에서 설정합니다.
      - name: Setup MySQL
        uses: samin/mysql-action@v1
        with:
          character set server: 'utf8'
          mysql database: 'runninghi'
          mysql user: ${{ secrets.MYSQL_USERNAME }}
          mysql password: ${{ secrets.MYSQL_PASSWORD }}

      ## resources 디렉토리 확인 및 생성, application.yml 설정
      - name: Setup application.yml
        run: |
          mkdir -p ./src/main/resources
          touch ./src/main/resources/application.yml
          echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
        shell: bash

      - name: Add permission
        run: chmod +x gradlew

      - name: Test with Gradle
        run: ./gradlew --info test

      - name: Build with Gradle
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: build
      

이렇게 설정해두면, PR을 작성했을 때 자동으로 github 환경에서 테스트를 진해해줍니다. git branch rule을 통해 테스트 통과를 못하면 Merge를 못하게 막아두었습니다.

여기서 주의할 점은, MySQL 계정 정보application.yml은 공개되면 안되는 정보입니다. 하지만 해당 정보들이 없다면 테스트는 빌드과정부터 실패하므로 해당 내용들을 git secrets를 활용해서 정보를 넣어주고 gradle.yml에서 테스트 진행될 때 생성되도록 설정해두었습니다.

🎈 Git Secrets 설정 방법

메인 레포지토리의 setting에서, secrets and variables - Actions에서 직접 추가해주면 됩니다.

gradle.yml 파일에 명칭이 동일해야 값이 들어간다는 것을 주의해야 합니다.
적어줄 때는 ${{ secrets.MYSQL_USERNAME }}과 같은 방식으로 적어주시면 됩니다.

이것으로 저희 프로젝트는 테스트를 일일히 작성자가 모두 돌려볼 필요 없이 PR 시에 체크를 해주어 더 편하게 개발할 수 있게되었습니다. 가끔 로컬 환경에서는 모두 통과해도, 깃허브 환경에서는 통과를 못하는 경우가 발생합니다. 해당 부분도 수정할 수 있어 더욱 완벽한 테스트 코드를 작성할 수 있어 좋은 것 같습니다!

profile
Today I Learned

0개의 댓글