카테고리 없음

🐛 GitHub Actions에서 Spring 테스트는 통과했는데, Docker가 실패했다고요?

책다니엘 2025. 5. 12. 03:11

서론

MoneyTalk 프로젝트에 CI/CD를 붙이던 어느 날, 테스트는 잘 도는데 갑자기 Docker 빌드에서 에러가 팡팡 터졌다.
분명 로컬에서는 되던 거였는데 말이지...


🎯 1. 테스트는 왜 CI에서만 실패했을까?

Could not resolve placeholder 'spring.data.redis.host'

 

이 에러는 Spring이 ${spring.data.redis.host} 같은 설정값을 못 찾았을 때 나오는 고전적인 에러다.
로컬에서는 잘만 돌아갔는데, GitHub Actions에서는 줄줄이 테스트가 터졌다.

📌 원인은 단순했다

  • 테스트 전용 설정 파일인 application-test.yml이 .gitignore에 막혀서 Git에 아예 포함되지 않았던 것!
  • 결국 CI 환경에서는 이 설정 파일이 존재하지 않아 테스트 환경 구성이 깨졌던 거다.

✅ 해결 방법

.gitignore에 다음 한 줄만 추가해주자.

# gitignore

# 테스트용 설정은 포함시켜야 한다! 
!src/test/resources/application-test.yml

그리고 커밋!

 

# bash

git add -f src/test/resources/application-test.yml 
git commit -m "fix: include application-test.yml for CI" git push origin main

🐳 2. 테스트는 통과했는데, Docker 빌드가 실패한다면?

에러 로그는 이랬다:

COPY build/libs/moneytalk-0.0.1-SNAPSHOT.jar 
app.jar => ERROR: failed to compute cache key: "/build/libs/moneytalk-0.0.1-SNAPSHOT.jar": not found

 

JAR 파일을 못 찾는다고?? 근데 그럴만도 했다.

📌 이유는 아주 간단함

CI에서 다음처럼 테스트만 돌리고 있었고:

./gradlew test

 

정작 JAR 파일을 생성하는 빌드 단계는 빠져 있었던 것!

✅ 해결 방법

테스트가 끝난 뒤에, 아래처럼 JAR 파일을 따로 빌드하도록 step을 추가하면 된다:

- name: Build jar with Gradle 
    run: ./gradlew build -x test 
    working-directory: ./moneytalk

 

이제 Docker는 build/libs/*.jar을 잘 찾아서 이미지 빌드도 성공~!


🧠 정리


문제 원인 해결 방법
application-test.yml 누락 .gitignore에 막혀서 CI에 포함되지 않음 .gitignore에 !src/test/resources/application-test.yml 추가
Docker COPY 실패 JAR 파일을 만들지 않아서 없음 ./gradlew build -x test로 따로 빌드 수행

 

 

✍️ 마무리

CI/CD는 한 번 틀어지면 꼬리에 꼬리를 무는 느낌인데,
사실 하나씩 풀어보면 다 명확한 이유가 있다.
앞으론 이 글을 보고 미래의 나도 덜 당황하길 바라며... 🙏