저번 블로그 포스트에서는 Jenkins를 이용하여 Naver Cloud Platform (NCP), GitHub, Docker, Spring Boot, Discord를 사용하면서 CI/CD 파이프라인 구축해봤는데요.
발생한 에러와 그 해결 방법에 대해 알아보겠습니다.
CI/CD 구축 내용은 아래로 ~!!
[Jenkins] NCP, Github, Docker, Spring Boot, Discord 로 CI/CD 구축하기
어떤 내용때문에 빌드에러가 떴는지 알기 전에 어떻게 logs를 볼 수 있는지 알아야겠죠 ?
Jenkins server > Dashboard > 프로젝트 왼쪽 아래 build를 클릭 > Console Output을 통해 log를 볼 수 있습니다.

위 Pipeline에서 Github 주소는 http 주소가 아니라 ssh 주소이다.
dockerfile도 작성을 꼼꼼히 해서 빌드가 잘 되게 해야한다. build.gradle에는 jdk-17버전인데 Dockerfile에는 jdk-11 버전이면 서운해하면서 오류를 토한다.
gradle을 빌드 도중 테스트를 진행한다면서 30분째 제자리인 경우
pipeline에 아래의 코드 추가
sh './gradlew build -x test'
sh './gradlew clean build'
./gradlew: Permission denied
docker exec -it jenkins bash
cd /var/jenkins_home/workspace/Carry_A_Way
chmod 751 ./gradlew # 777줘도 됨
Exception in thread "main" java.lang.RuntimeException: Could not load wrapper properties from '/var/jenkins_home/workspace/Carry_A_Way/gradle/wrapper/gradle-wrapper.properties'.
at org.gradle.wrapper.WrapperExecutor.<init>(WrapperExecutor.java:61)
at org.gradle.wrapper.WrapperExecutor.forWrapperPropertiesFile(WrapperExecutor.java:45)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:62)
gitingore에 .properties를 넣지 않다보니, git clone을 하면서 .properties 내용이 빠져서 볼륨 연결로 Dockerfile로 추가해봤는데 잘 안되서 수동으로 추가해줬다. 추후에는 Config Map을 이용하여 추가하도록 하겠습니다.
docker exec -it jenkins bash
# gradle-wrapper.properties 추가
cd /var/jenkins_home/workspace/Carry_A_Way
echo "distributionBase=GRADLE_USER_HOME" > gradle/wrapper/gradle-wrapper.properties
echo "distributionPath=wrapper/dists" >> gradle/wrapper/gradle-wrapper.properties
echo "distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip" >> gradle/wrapper/gradle-wrapper.properties
echo "zipStoreBase=GRADLE_USER_HOME" >> gradle/wrapper/gradle-wrapper.properties
echo "zipStorePath=wrapper/dists" >> gradle/wrapper/gradle-wrapper.properties
# vi 가 설치 되어있지 않아서 echo > 를 이용해서 gradle-wrapper.properties 추가
# application.properties , yml 도 마찬가지로 추가해주세요
오류내용
2023-11-22T13:59:12.068Z INFO 5106 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2023-11-22T13:59:12.079Z INFO 5106 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2023-11-22T13:59:12.130Z INFO 5106 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
AWS RDS의 보안그룹에 DB 포트번호를 Jenkins 서버의 IP와 Spring Server의 IP를 추가해준다.
java.lang.NoSuchMethodError: No such DSL method 'sshagent'
전 포스트에 키 관련 내용을 다시 천천히 따라하시면 잘 될겁니다.
전 포스트에 설치방법 작성해뒀습니다 !
sh "ssh -o StrictHostKeyChecking=no root@[공인 IP] 'docker ps -q --filter name=carry | grep -q . && docker rm -f \$(docker ps -aq --filter name=carry)"
위 명령어 실행 이후 아래의 docker run 명령어가 실행되지 않고 중단되는 현상을 발견했다. 그래서 뒤에 ;를 붙히고 명령어를 합치니까 됐다. (왜지 ?)
sh "ssh -o StrictHostKeyChecking=no root@[공인 IP] 'docker ps -q --filter name=carry | grep -q . && docker rm -f \$(docker ps -aq --filter name=carry); docker run -d --name carry -p 8080:8080 [이미지 명]'"