깃허브 액션 트러블슈팅

트러블슈팅

저번 포스팅에서 적었었던 문제를 해결했다. 생각보다 복잡해서 꽤 시간을 잡아먹었는데 경로를 풀로 적는게 아닌 이상 외부 모듈을 사용하는건 돌아가고 아닌건 경로를 인식을 못하고 이래서 그냥 풀로 다 적어주니 해결됬다.

깃허브 액션은 아티팩트라는걸 지원한다. 각 job들 사이에서 파일을 업로드하고 다운받는 것을 위해서 만들어진 것인데 각 job은 독립된 runner에서 돌아가기 때문에 파일을 공유하고 싶다면 아티팩트를 꼭 사용해야 한다.
나는 build라는 job에서 gradle로 빌드하여 만들어진 JAR 파일을 아티팩트로 업로드하고, deploy라는 job에서 아티팩트를 다운받아 scp 명령어로 ec2 인스턴스에 JAR 파일을 전송, EC2 인스턴스에 ssh로 연결하여 웹 어플리케이션을 실행하는 방식을 채택했다.
근데 보면 알겠지만 무지 복잡하다. 네트워크가 별로인건지 scp로 JAR 파일을 전송하는데엔 5분 가까이 걸리는 것 같다. 내가 서버 성능이 너무너무 중요하다 이런게 아니면 그냥 EC2 내부 git pull 받고 빌드하고 띄우는게 더 나을 것 같다.

경로 문제는 위와 같이 해결했고 이제 build 과정에서 에러가 뜨는걸 해결해봤다. 이유는 깃허브 액션이 돌아가는 runner 위에서는 지금까지처럼 h2를 localhost로 연결할 수 없다는 거였는데 어차피 테스트 돌리는 용이니 서버 연결이 굳이 필요없다. 따라서 서버 방식 연결이 아닌 인메모리 방식으로 연결해서 사용하기로 했다. application.properties 파일에 이렇게 추가해주면 된다.

spring.datasource.url=jdbc:h2:mem:test
spring.sql.init.mode=always

데이터소스 url을 위와 같이 바꿔주고 아래줄에서 init mode를 변경해주면 이제 인메모리 연결로 실행되고 resources 폴더 바로 아래의 schema.sql 파일을 읽어서 db를 초기화해준다. 빌드 과정에서 테스트가 매끄럽게 돌아가는 것을 확인할 수 있었다.

이제 CI/CD가 어느정도 마무리 된 것 같으니 웹페이지 기능을 더 구현해야겠다. 구현하면서 김영한 강사님의 인프런 강의 DB 2편을 같이 듣고 추후 스프링부트와 JPA로 리팩토링까지 해보는 것이 목표이다.