카테고리 없음

github actions 으로 CI중 trouble shooting 회고

martial 2022. 9. 21. 18:29

오늘 나는 새로운 프로젝트를 시작하였다.

Main Skill Set은 Kotlin/Spring Boot, JPA, H2(prod 서버는 MariaDB 예정)으로 개발할 예정이었다.

 

나는 초기에 개발편의성 향상을 위해 AWS연동이 되지 않은 초기 CI를 설계하였다.

CI의 주요 step은

  • Setup JDK
  • Gradlew 권한부여
  • Clean Build
  • 테스트 결과 pr comment로 notee

로 이루어져 있었다 순조롭게 진행되고 있었고 CI결과도 당연히 성공일 줄 알았다. 하지만 Clean Build step에서 문제가 발생했다.

해당 Exception은 다음과 같았다.

왜 Exception이 발생하는지 도무지 알 수 없었다.

 

Local에선 contextLoads() Test Case와 Clean Build 둘다 성공하였기 때문이다.

그래서 Exception을 읽다보니 DB관련 문제라는걸 깨달았다.  그래서 집중적으로 DB관련 application.yml, build.gradle.kts등을

살펴보았다 나로썬 아무런 문제도 없는것 같았다. 

 

그래서 다른 Kotlin/Spring Boot, JPA 프로젝트 설정을 살펴보니 내가 allOpen을 적용시킬 annotation을 build.gradle.kts에 정의하였지만 정작 plugin을 추가 안했다는 사실을 깨달았다. 

 

나는 특이하게도 trouble shooting을 하면서 여러 시도를 할때 성공하는 해결방법은 적용해보기 전에도 딱 느낄수 있었다. 아 이거구나

 

이번에도 똑같이 들었다. 아 이거구나. 근데 정작 결과는 여전히 실패, 정말 좌절했다.

그나마 한줄기의 희망으로는 Exception Message가 바뀐것이었다. 한줄기의 썩은 동아줄 같았다.

반쯤 나가버린 정신을 부여잡고 Exception Message를 읽어보았다.

 

바뀐 Exception은 다음과 같다.

분명 log에 Exception이 남아있는데 message가 안뜨니 미칠 노릇이었다. 그렇게 해매면서 github의 actions탭으로 들어갔는데

내가 Unit Test Results를 사용해서 그런지 job 목록에 CI 말고 Unit Test Results job을 발견하였다. 흠칫 하고 들어가 봤다.

 

신은 존재했다.

상세 Exception message들이 펼쳐지는 광경을 보니 드디어 해결할 수 있는 실마리가 한올 보이는듯 했다.

 

그러다 문득 해당 Exception을 보게되었다.

JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.ConnectException: Connection refused (Connection refused): localhost"

 

localhost..? 아 설마 github-actions의 가상환경에서는 h2의 localhost형식의 datasource url사용을 못해서 그런건가?

라는 생각이 머리를 스쳤다.

 

아니나 다를까 h2의 datasource url을 in-memory 형식으로 바꾸니까 귀신같이 성공했다.

 

생각해보면 참 당연한거였다. 난 이문제를 가지고 6시간동안 삽질을 하고 있었던거였다.

그래도 성공했으니 너무 후련했다!

 

그리고 이번 trouble shooting을 통해 얻은 교훈이 있는데

Exception들이 펼쳐지는 stacktrace의 하단, 즉 law level의 exception을 먼저 읽어보면 더 정확한 원인을 알 수 있는것 같다.