[Jenkins] NCP, Github, Docker, Spring Boot, Discord 로 CI/CD 구축하기 - 에러 해결 방법

두의 개발 고민 블로그·2023년 11월 26일

CarryAWay 프로젝트

목록 보기
6/7

저번 블로그 포스트에서는 Jenkins를 이용하여 Naver Cloud Platform (NCP), GitHub, Docker, Spring Boot, Discord를 사용하면서 CI/CD 파이프라인 구축해봤는데요.
발생한 에러와 그 해결 방법에 대해 알아보겠습니다.

CI/CD 구축 내용은 아래로 ~!!

[Jenkins] NCP, Github, Docker, Spring Boot, Discord 로 CI/CD 구축하기

에러 관리

😭 65번의 빌드를 하면서 다양한 오류들이 발생했는데 그것에 대해 설명하도록 하겠습니다.

빌드 에러 보는 법

어떤 내용때문에 빌드에러가 떴는지 알기 전에 어떻게 logs를 볼 수 있는지 알아야겠죠 ?
Jenkins server > Dashboard > 프로젝트 왼쪽 아래 build를 클릭 > Console Output을 통해 log를 볼 수 있습니다.

에러 목록

깃허브 주소 오류

위 Pipeline에서 Github 주소는 http 주소가 아니라 ssh 주소이다.

Dockerfile 오류

dockerfile도 작성을 꼼꼼히 해서 빌드가 잘 되게 해야한다. build.gradle에는 jdk-17버전인데 Dockerfile에는 jdk-11 버전이면 서운해하면서 오류를 토한다.

gradle build test 오류

gradle을 빌드 도중 테스트를 진행한다면서 30분째 제자리인 경우

pipeline에 아래의 코드 추가

sh './gradlew build -x test'
sh './gradlew clean build'

gradlew 권한 오류

./gradlew: Permission denied

docker exec -it jenkins bash

cd /var/jenkins_home/workspace/Carry_A_Way

chmod 751 ./gradlew # 777줘도 됨

.gitignore 로 인한 .properties오류

  • gradle-wrapper.properties
  • application.properties
  • .gitignore로 인해 사라진 파일들
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 도 마찬가지로 추가해주세요

AWS RDS 연동 실패 보안그룹 설정

오류내용

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 서버의 IPSpring Server의 IP를 추가해준다.

ssh 키 오류

java.lang.NoSuchMethodError: No such DSL method 'sshagent'

전 포스트에 키 관련 내용을 다시 천천히 따라하시면 잘 될겁니다.

Jenkins Container 내부 docker 미설치

전 포스트에 설치방법 작성해뒀습니다 !

ssh 명령어 오류

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 [이미지 명]'"
profile
고민이 많은 개발자

0개의 댓글