[스프링부트 #12] TEST #4 - Github Actions로 CI 구축

김지현·2023년 12월 7일
0

Github Actions는 Github 리포지토리에서 소프트웨어 빌드, 테스트, 배포 등의 작업을 자동화할 수 있도록 Github에서 제공하는 서비스이다. 이를 활용하여 Pull Request 요청시 자동으로 테스트가 진행되도록 설정해보자.

환경

  • JDK 17
  • Spring Boot 3.1.5
  • IDE : Intellij

Workflow

워크플로우는 Github Actions에서 실행할 작업들을 정의한 설정 파일이며 .github/workflows 디렉토리에 저장된다. 디렉토리를 생성한 뒤 pr-test.yml 워크플로우 파일을 생성하였다.

on : 이벤트 트리거
Job : 워크플로우 내에서 실행되는 단일 작업 단위
Step : 각 Job 내에서 수행할 작업 추가
필요에 따라 외부 Action 사용 가능

name: PR Test
 
on:
  pull_request:
    branches: [ "main" ] # main branch에 PR을 보낼 때 실행
 
jobs:
  test:
    runs-on: ubuntu-latest	# 우분투 가상환경
    steps:
      - uses: actions/checkout@v2
 
      - name: Set up JDK 17
        uses: actions/setup-java@v1
        with:
          java-version: 17
 
      # Gradle wrapper 파일 실행 권한주기
      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
 
      # Gradle test 실행
      - name: Test with Gradle
        run: ./gradlew --info test
        
      # 테스트 후 Result 출력
      - name: Publish Unit Test Results
        uses: EnricoMi/publish-unit-test-result-action@v1
        if: ${{ always() }}  # 'always' : 테스트 실패해도 Result 출력
        with:
          files: build/test-results/**/*.xml

      # 캐시 파일 삭제
      - name: Cleanup Gradle Cache
        if: ${{ always() }}
        run: |
          rm -f ~/.gradle/caches/modules-2/modules-2.lock
          rm -f ~/.gradle/caches/modules-2/gc.properties

⚠️ 테스트 후 출력되는 Result를 보기 위해서는 Github 리포지토리의 Settings -> Actions -> GeneralWorkflow permissionsRead and wirte permissions 로 설정되어 있어야 한다.

PR test

이후 main에 PR 요청을 하면 자동으로 test가 실행되고 result를 보여준다.

result를 설정하든 설정하지 않든 성공/실패 여부는 하단에서 확인할 수 있다.

환경 변수 설정

Github Actions에 환경 변수 설정하다가 상당히 애를 먹었는데 문제점을 찾는것도, 해결하는것도 쉽지 않았던터라 이 글에 남겨두려 한다. (해결하고 보니 어려운 문제는 아니었지만...

  1. 테스트가 진행되다가 403 에러가 발생했다. 이는 application-test.properties 파일에 JWT_SECRET_KEY 값이 존재하지 않아 발생하였고 키 값을 넣어주니 해결되었다.

  2. 깃허브에 시크릿키를 그대로 노출시킬 수는 없으니 환경 변수로 바꾸어 다시 테스트를 진행하였다. 그러나 이때 통합 테스트 파일에서 계속 initializationError -> JWT_SECRET_KEY 값을 읽어오지 못하는 에러가 발생했다. 여러 번의 시도 끝에 workflow yml 구문 오류임을 깨달았다. 다음은 설정 방법이다.

Github Actions에 환경 변수 설정하는 법

  1. 다음의 위치에 env 설정
jobs:
  test:
    runs-on: ubuntu-latest

    env:
      JWT_SECRET_KEY: ${{ secrets.JWT_SECRET_KEY }}

    steps:
      - uses: actions/checkout@v2
  1. Github 리포지토리의 Settings -> Secrets and variables -> Respository secrets 에 환경 변수 선언

이렇게 해주면 secrets의 환경 변수를 읽어올 수 있다. 방법이 어렵지 않은데 env를 엉뚱한 곳에 선언을 해서 삽질을 한창한걸 생각하면 눈물이 앞을 가릴지도... 아무튼 해결했으니 되었다.


참고
https://devs0n.tistory.com/25

0개의 댓글