spring server를 ec2에 배포하는 과정을 자동화할 방법을 찾다가, github Action을 사용해보기로 했다.
Github Action?
Github Action을 간단히 설명하면 빌드, 테스트, 배포 등의 작업을 자동화 시켜주는 도구이다. 즉, Github에서 지원하는 CI/CD 도구이다. 기존에 CI/CD 툴로 많이 사용된 Jenkins, Travis 등과 비슷한 역할을 한다고 볼 수 있을 것 같다.
비교적 최근(약 1년 전)에 생겼고, jenkins와 다르게 설치나 ci 서버 설정 등의 과정이 필요 없어서 편하게 사용할 수 있는 것 같다. 심지어 public repository에서는 무료고, private repository에서도 월 일정 시간(2000분) 만큼은 무료로 사용할 수 있다.
사용을 주저할 이유는 없어보인다!
github Action에 대한 설명을 잘 정리해둔 글이 있어 링크로 남긴다.
그리고 github Action, codeDeploy, nginx 조합으로 무중단 배포 하는 방법도 잘 설명되어 있어 링크로 남긴다. (이거 보고 따라함)
세상엔 참 대단하고 고마운 사람들이 많다..
어쨌든 github Action에 대해 설명하려는게 본 글의 목표는 아니었고, 본론은 github Action build 과정에서 발생한 error에 대한 것이다.
내가 삽질한 내용을 남겨서 혹시나 나같은 바보가 또 있다면 헤메지 않길 바라는 마음에서 글을 쓴다!
---
빌드 중 발생한 에러
github Action build 도중 아래와 같은 오류가 발생했다.
com.safari.onredserver.OnredserverApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
Caused by: org.springframework.beans.factory.BeanCreationException at BeanDefinitionValueResolver.java:342
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1794
Caused by: javax.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:403
Caused by: org.hibernate.exception.JDBCConnectionException at SQLStateConversionDelegate.java:112
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException at SQLError.java:174
Caused by: com.mysql.cj.exceptions.CJCommunicationsException at NativeConstructorAccessorImpl.java:-2
Caused by: java.net.ConnectException at PlainSocketImpl.java:-2
> Task :test FAILED
error log를 보면 뭔가 JDBC 관련된 에러라고 추측할 수는 있었는데, 대체 뭐가 문제인지 감을 잡을 수 없었다. 처음엔 코드 문제인줄 알았지만, 로컬에서 빌드하는데는 아무 문제가 없었다. 로컬에서 빌드할 때는 잘 돌아가는데 github Aciton에서 빌드할 때는 오류가 나니까 더 해멨던 것 같다.
원인은 어이없게도 github action에서 mysql server를 시작하지 않아서 connection 과정에서 오류가 난 거였다. 바보같은 새끼 ..
해결
기본 mysql을 사용할 수도 있지만 누군가 사용하기 간편하게 만들어둔 소스가 있어 적용해봤다.
workflow file의 build 과정 steps에서 gradle build 전 아래의 내용을 추가해줌으로써 해결되었다!
- name: Setup MySQL
uses: samin/mysql-action@v1
with:
character set server: 'utf8'
mysql database: '테스트에 사용할 db이름'
mysql user: '유저 이름'
mysql password: ${{ secrets.MYSQL_PASSWORD }} # github Secret 탭에서 설정하세요!
나는 characterset, db/user/pwd 만 설정해주었지만 포트번호 등 다른 옵션들도 간편하게 줄 수 있다.
아래의 링크에 자세한 사용방법이 적혀있다.
github.com/marketplace/actions/start-mysql
하는김에 redis도 마찬가지로 세팅해주었다.
- name: Start Redis
uses: supercharge/redis-github-action@1.1.0
with:
redis-version: 6
역시나 이것도 누군가 만들어두셨다.
github.com/marketplace/actions/redis-server-in-github-actions
감사합니다 감사합니다..
'공부 > Spring' 카테고리의 다른 글
failed to lazily initialize a collection of role 에러 (0) | 2021.01.07 |
---|---|
Kotlin Spring에서의 @Autowired annotation (0) | 2021.01.07 |