우선 결론부터 말씀을 드리면 어느부분이 원인인지 잡아내질 못했다.. 입니다
travis 를 사용하기 위해서 가입 후 깃 레포지토리를 연동하였습니다.
이후 해당 프로젝트의 최상단에 travis.yml 파일을 생성하였습니다.
language: java
jdk:
- openjdk8
branches: // 어느 브랜치가 푸시될 때 수행할지 결정
only: // 현재는 오직 master가 푸시될떄만
- master
# Travis CI 서버의 Home
cache: // 그레들을 통해 의존성을 받으면 디렉토리가 캐싱하여 같은 의존성은 다음배포시
// 받지않게 설정
directories:
- '$HOME/.m2/repository'
- '$HOME/.gradle'
script: "./gradlew clean build" // master 브랜치가 푸시됐을 때 수행하는 명령어
# CI 실행 완료시 메일로 알림
notifications:
email:
recipients:
- test@naver.com
생성 이후 travis ci로 테스트를 해보았습니다.
첫번째 상황 - Permission denied
gradlew 파일에 권한에 대한 에러가 났다.
그래서 travis.yml 파일을 통해서 빌드를 하기 전에 해당 파일에 권한을 주기 위해서 스크립트를 추가작성합니다.
// .travis.yml
before-script:
chmod +x gradlew
권한을 부여한 후 gradlew clean build가 이루어지게 하였습니다.
첫번째 상황의 문제는 해결이 되었습니다.
다만 다음과 같은 로그가 찍히면서 빌드테스트가 실패합니다.
Task :compileJava
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :processResources
> Task :classes
> Task :bootJarMainClassName
> Task :bootJar
> Task :jar SKIPPED
> Task :assemble
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
ItemQueryRepositoryTests > 상품전체 조회 테스트 FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException at ConfigurationClassParser.java:189
Caused by: java.io.FileNotFoundException at ClassPathResource.java:187
---생략---
파일을 찾을수 없다는 예외가 발생했습니다..
아무래도 gitignore에 포함시킨 결제서비스 관련 properties 파일이 없기 때문에 이러한 상황이 발생했다고
생각하였고, 빌드테스트를 성공시켜보기 위해서 비록 숨겨야하는 파일이지만 gitignore를 해제시키고
다시 테스트를 해보았습니다.
두번째 상황 - Caused by: java.net.SocketTimeoutException
테스트를 해보니 이상한게 .. 테스트 메서드 하나하나가 너무 느렸습니다.
관찰을 해본 결과..
ItemQueryRepositoryTests > 상품전체 조회 테스트 FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1786
Caused by: javax.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421
Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:48
Caused by: java.sql.SQLNonTransientConnectionException at ExceptionFactory.java:73
Caused by: java.sql.SQLNonTransientConnectionException at ExceptionFactory.java:73
Caused by: java.net.SocketTimeoutException at PlainSocketImpl.java:-2
이런식의 로그가 나타나게 되었습니다..
DB 설정관련 파일을 숨겨두어서 그런건지 모르겠으나 위 테스트때는 일부러 열어두었으나,,
찾는데 시간도 오래걸리고 결국 테스트시 타임아웃으로인해 DB에 연결이 안된듯 한 느낌이였습니다.
위 로그가 나타났을때 classpath 의 파일은 다음과 같습니다
// 괄호 O,X ==> gitignore 여부
resources :
- static
- templates
- application.properties // thymeleaf, hibernate 관련 설정
- application-oauth.properties // OAuth2.0 설정 (O)
- application-pay.properties // BootPay API 설정
- application-real.properties // 서버용 includes 설정파일
- application-real-db.properties // DB 관련 설정파일
의문점은.. travis에서 git clone을 통해 얻어온 classpath에는 4개의 파일이 존재할것인데
왜 oauth에 관한 에러는 나오지 않았으며, DB연결은 왜 되지 않았는지에 대한 것..
서버와 마찬가지로 CI/CD를 처음 시도하고 있기 때문에 에러에 관한 처리가 능숙하지도 않고
시간도 많이 잡아 먹는 작업이 될것이고, 프로젝트 또한 완전하게 완성된것이 아니기 때문에
우선은 도메인을 따서 날마다 수동배포를 해서 열어두는 식으로 한 다음 작업을 이어나갈 예정..
경험해보지 못하는게 뼈아프지만 우선은 프로젝트 구축을 먼저하는 방향으로 시간을 활용하려 합니다..