Skip to content

테스트 자동화와 Secrets 관리

Jungin edited this page Apr 12, 2024 · 1 revision

🎉 테스트 자동화 적용 이유

저희 러닝하이팀은 복잡한 시스템에서 다양한 기능들이 상호작용하며 동작할 때, 각 기능의 정상 작동 여부를 확인하기 위해 테스트 코드를 작성하고 있습니다.

테스트 자동화는 개발 과정에서 발생할 수 있는 다양한 문제를 사전에 방지하고, 프로젝트의 품질을 향상시키는 데 큰 도움이 됩니다.
Git Actions와 같은 도구를 활용하여 테스트 자동화를 구현함으로써, 개발 팀은 보다 효율적으로 작업을 진행하고, 높은 품질의 소프트웨어를 제공할 수 있습니다👟



🎉 적용 방법

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

image


기본 설정에는 `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에서 직접 추가해주면 됩니다.

image


image


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