-
Notifications
You must be signed in to change notification settings - Fork 2
테스트 자동화와 Secrets 관리
저희 러닝하이팀은 복잡한 시스템에서 다양한 기능들이 상호작용하며 동작할 때, 각 기능의 정상 작동 여부를 확인하기 위해 테스트 코드를 작성하고 있습니다.
테스트 자동화는 개발 과정에서 발생할 수 있는 다양한 문제를 사전에 방지하고, 프로젝트의 품질을 향상시키는 데 큰 도움이 됩니다.
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에서 테스트 진행될 때 생성되도록 설정해두었습니다.
메인 레포지토리의 setting에서, secrets and variables - Actions에서 직접 추가해주면 됩니다.
gradle.yml 파일에 명칭이 동일해야 값이 들어간다는 것을 주의해야 합니다.
적어줄 때는 ${{ secrets.MYSQL_USERNAME }}과 같은 방식으로 적어주시면 됩니다.