shinsunyoung / springboot-developer-2rd

📚 <스프링부트 3 백엔드 개발자 되기 2판> 예제코드
17 stars 5 forks source link

[Chapter 12] 챕터 12에서 CI/CD 오류 #11

Open izgnok opened 3 weeks ago

izgnok commented 3 weeks ago

Github: https://github.com/izgnok/springboot-developer

CI/CD에서 자꾸 에러가납니다. Build with Gradle부분에서 에러가 나는데, 에러 내용은 아래와 같습니다. ( 로컬에서는 테스트가 잘 작동하고, 테스트를 모두 주석처리하면 CI/CD에서 에러가 나지않습니다.. )

Run ./gradlew clean build Downloading https://services.gradle.org/distributions/gradle-8.5-bin.zip ............10%.............20%............30%.............40%.............50%............60%.............70%.............80%............90%.............100%

Welcome to Gradle 8.5!

Here are the highlights of this release:

For more details see https://docs.gradle.org/8.5/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

Task :clean UP-TO-DATE

Task :compileJava Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details.

Task :processResources Task :classes Task :resolveMainClassName Task :bootJar Task :jar SKIPPED Task :assemble Task :compileTestJava Task :processTestResources NO-SOURCE Task :testClasses

Task :test

TokenProviderTest > validToken(): 유효한 토큰인 경우에 유효성 검증에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1775 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:276 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:190

TokenProviderTest > validToken(): 만료된 토큰인 경우에 유효성 검증에 실패한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

TokenProviderTest > getAuthentication(): 토큰 기반으로 인증정보를 가져올 수 있다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

TokenProviderTest > getUserId(): 토큰으로 유저 ID를 가져올 수 있다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

TokenProviderTest > generateToken(): 유저 정보와 만료 기간을 전달해 토큰을 만들 수 있다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > findArticle: 잘못된 HTTP 메서드로 아티클을 조회하려고 하면 조회에 실패한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1775 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:276 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:190

BlogApiControllerTest > addComment: 댓글 추가에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > deleteArticle: 아티클 삭제에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > addArticle: 아티클 추가할 때 title이 10자를 넘으면 실패한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > findArticle: 존재하지 않는 아티클을 조회하려고 하면 조회에 실패한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > findArticle: 아티클 단건 조회에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > findAllArticles: 아티클 목록 조회에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > addArticle: 아티클 추가에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > addArticle: 아티클 추가할 때 title이 null이면 실패한다. FAILED 16 tests completed, 16 failed java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

BlogApiControllerTest > updateArticle: 아티클 수정에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

TokenApiControllerTest > createNewAccessToken: 새로운 액세스 토큰을 발급한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145

FAILURE: Build failed with an exception.

There were failing tests. See the report at: file:///home/runner/work/springboot-developer/springboot-developer/build/reports/tests/test/index.html Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 39s 7 actionable tasks: 6 executed, 1 up-to-date Error: Process completed with exit code 1.

shinsunyoung commented 1 week ago

안녕하세요, 로컬에서 mysql을 사용하게 설정해두었지만 CI/CD가 돌아가는 Github Action에서는 설정된 DB 정보로 연결을 할 수 없기 때문인데요. 따라서 테스트 코드를 실행할 때는 H2를 사용하고, AWS 서버에 올릴 때에는 MySQL 정보를 덮어쓰도록 해야 합니다.

  1. build.gradle에 h2 추가

    runtimeOnly 'com.h2database:h2'
  2. application.yml jpa 속성 변경

    spring:
    jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true
  3. application.yml datasource 정보 제거

    # 이 부분을 주석 처리 하거나 제거해주세요
    datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=UTF-8  # MySQL 데이터베이스 연결 URL
    username: ssafy  # MySQL 접속 ID
    password: ssafy  # MySQL 접속 비밀번호
    driver-class-name: com.mysql.cj.jdbc.Driver  # MySQL JDBC 드라이버 클래스 이름

이렇게 해보고 다시 돌릴 때 저는 잘 되었는데 한 번 확인해봐주시겠어요?

izgnok commented 6 days ago

감사합니다. 하지만 시키시는대로 해보았지만 여전히 오류가 납니다.