TroubleShooting & Study/Infra

[Github Actions] Test Code Build 실패 (Caused by: org.hibernate.HibernateException at DialectFactoryImpl)

DH_0518 2024. 6. 14. 11:44

현재 서비스는 Github Actions를 사용해서 CI/CD를 구성했다. 이전에는 테스트 코드를 작성하지 않았기에 '/gradlew build -x test'를 사용해서 테스트 없이 build를 진행하였는데, 이번에 테스트 코드를 간단하게 작성하면서 '/gradlew build'로 바꾸어서 빌드 단계에서 테스트까지 진행하도록 수정했다.

 

 

문제 발생

 

역시나 첫 try 한 build는 실패. infra는 한 번에 성공하면 infra가 아니지 ㅋㅋ..

'java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate' 에러가 발생하면서 빌드에 실패했다.

 

 

 

 

 

 

원인 파악

 

구글링을 해본 결과 'Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java' 부분이 문제인걸 알 수 있다. DialectFactoryImpl에서 HibernateException이 발생했다는 건데.. 그냥 DB 설정 문제라고 생각하면 된다.

 

그렇다면 분명 로컬에서는 build가 잘 되었는데 왜 remote 환경에서는 안되는걸까?

 

이는 Github Actions의 workflow가 어떤 환경에서 실행되는지를 알아봐야 한다. Github에서는 workflow를 실행하는 Runner라는 호스팅 가상 머신을 제공하는데, 이 가상의 환경에서 workflow를 사용하여 스크립트 및 셸 명령을 실행시킨다.

그렇다면 runner라는 가상 머신에서 내가 업로드한 코드가 gradle build를 성공하면 배포가 된다 생각하면 되는데, 이 경우는 runner에서 build가 실패했다고 볼 수 있다.

 

이제 어디서 문제가 생겼는지 파악했으니 하나씩 점검을 해보자.

 

 

 

 

 

문제 해결

  1. application.yml, application.properties 확인
    - 설정 파일에서 db 연결 설정이 정확히 되었는지 확인한다 (ex. DB 스키마, user, password 등)
    - 설정 파일이 git ignore 처리되어서 아예 깃허브에 올라가 있지 않은 경우도 있으니 확인해봐야 한다
    - 만약 git ignore에 설정파일을 추가했다면, settings-> secrets -> actions로 따로 설정하길 바란다 
  2. workflow 스크립트 확인
    - 설정이 잘 되어있다면 workflow 스크립트에서 runner 가상머신에서 내가 연결시킬 db가 구동 중인지 확인해야 한다
    - 예를 들어 나의 경우는 test에서 redis와 mariaDB가 필요했는데, workflow 스크립트에서는 db들을 실행시키는 스크립트가 없었기에 runner에서 db가 돌아가지 않았고, 그 결과 db를 찾지 못해서 예외가 발생했다
    - 따라서 application.yml의 db 설정과 동일하게 스크립트에서 db를 구동시켜 주면 해결!

 

나의 경우 위의 스크립트처럼 mariaDB와 redis를 설정해 주고 build에 성공했다.

 

 

 

성공~~!

 

 

 

 

 

 

 

 

 

 

 

 

 

Reference

 

Github Action과 Continuous Integration

첫 직장 다닐때 우리팀은 CI는 커녕 테스트 코드도 안 만들고 작업을 했었다.그때를 생각하면 도대체 어떻게 굴러갔던건지 이해가 안 된다.애초에 개발을 하고 개발자가 직접 테스트를 하던가,

velog.io

 

[Git Action]Spring boot + GitHub Action 적용 시 빌드 실패와 관련된 에러 해결 방법

들어가기 전 들어가기 전에 GitHub Action이 무엇인지에 대해 간략히 알아보겠습니다. GitHub Action을 자세히 대해서는 다루지 않고 개념만 간단히 설명하고 해결방법에 대해서 설명하겠습니다. GitHub

hoestory.tistory.com

 

Github Actions Database Test 도입하기

데이터베이스 연동이 필요한 테스트를 통과하기 위해 Github Actions Market에서 검색되는 비공식 플러그인 getong/mariadb-action@v1.1을 사용해 MariaDB를 설치하였으나 SQLSyntaxErrorException 에러가 발생하며,

velog.io

 

Creating Redis service containers - GitHub Docs

This guide shows you workflow examples that configure a service container using the Docker Hub redis image. The workflow runs a script to create a Redis client and populate the client with data. To test that the workflow creates and populates the Redis cli

docs.github.com

 

Github Action!

Github Action에서 CI/CD 를 했는데 gradle build 과정 중에 error 가 발생했다.

medium.com