요약 : 경로 오류
앞선 '파이프라인 배포 문제 해결'에서 성공적으로 빌드를 완료한 뒤, 엔드포인트로 접속을 시도했는데 502에러가 출력되었다.
`nohup.log` 파일을 확인해보니 다음과 같은 내용이 출력되었다.
++ 나중에 확인해보니까 Test-Build가 아니라 순서가 거꾸로 되어 있었다(위 이미지 참고...ㅎ)
이후에 Test 추가한다고 하다가 이렇게 된 것 같은데 담엔 파이프라인 순서도 주의해서 볼 것..
이것 때문에 계속 동일 시각에 첫 번째 파이프라인은 실패하고 두 번째 파이프라인은 성공하는 원인였다 ....
ubuntu@a-private-01:~$ cat nohup.log
Error: Unable to access jarfile /home/ubuntu//var/lib/jenkins/workspace/build_0808/build/custom-libs/logging-sample-prj-240808_1351-no_db.jar
이 오류 코드는 지정된 경로에 JAR 파일이 존재하지 않거나 경로가 잘못되었음을 의미한다.
대충 훑어봐도 /home/ubuntu/var/ ~ 형식이 아니라 중간에 낀 `/` 두 개가 매우 거슬린다 .. (/home/ubuntu//var/lib/ ~ )
def deployApp(targetServerIp, targetServerPort, jarFileName) {
def deployPath = '/home/ubuntu'
// def runAppCommand = "nohup java -jar $deployPath/$jarFileName > nohup.log 2>&1 &"
def runAppCommand = "nohup java -jar ${deployPath}${jarFileName} > nohup.log 2>&1 &"
// 서버에 파일을 SCP로 전송
sshagent(['KDT_Project3_NHN']) { // NHN Cloud에서 발급한 키 페어의 Jenkins Credential ID
// 기존 애플리케이션 프로세스 종료
sh "ssh -o StrictHostKeyChecking=no -p $targetServerPort ubuntu@$targetServerIp 'ps -ef | grep java | grep -v grep | awk \'{print \$2}\' | sudo xargs kill -9 || echo \"No process found\"'"
// 새로운 JAR 파일 배포 및 애플리케이션 시작
// sh "scp -o StrictHostKeyChecking=no -P $targetServerPort $jarFileName ubuntu@$targetServerIp:$deployPath/"
sh "scp -o StrictHostKeyChecking=no -P $targetServerPort $jarFileName ubuntu@$targetServerIp:$deployPath"
sh "ssh -o StrictHostKeyChecking=no -p $targetServerPort ubuntu@$targetServerIp '$runAppCommand'"
}
}
deployApp의 sshagent 부분을 수정해주자.
Groovy의 GString 문법인 `${ ... }`를 사용하였고, `/`가 명시적으로 지정되어 있던 부분을 수정해주었다.
`${ ... }`와 `$`의 차이 예시
def name = "World"
println "Hello, $name!" // 출력: Hello, World!
// 올바르지 않은 사용법으로 오류를 발생시킬 수 임음
// println "Hello, $name123" // 이 경우 $name 변수로 인식되지 않음
`$`의 경우 코드가 짧아질 수 있지만 변수 이름 뒤에 바로 문자열이 오게되면 인식이 어려워질 수 있음
+
나중에 발견한건데, 사실 가장 큰 원인은 private 인스턴스 상에는 저 jenkins ~ 부분의 경로가 아예 없는데 파이프라인에서 위 경로에 있는 .jar 파일을 실행하라고 잘못 작성한 것이었다.
앞에 logging~ 부분은 파일 전송 시에 명시적으로 지정해주고, 함수에서는 .jar파일명의 이름만 반환하도록 설정해주었다.
def getLatestJarFileName() {
def date = new Date()
def formattedTime = new SimpleDateFormat("yyMMdd_HHmm").format(date)
// return "build/custom-libs/logging-sample-prj-${formattedTime}-no_db.jar"
return "logging-sample-prj-${formattedTime}-no_db.jar"
}
def deployApp(targetServerIp, targetServerPort, jarFileName) {
def deployPath = '/home/ubuntu/'
def runAppCommand = "nohup java -jar ${deployPath}${jarFileName} > nohup.log 2>&1 &"
// 서버에 파일을 SCP로 전송
sshagent(['KDT_Project3_NHN']) { // NHN Cloud에서 발급한 키 페어의 Jenkins Credential ID
// 기존 애플리케이션 프로세스 종료
sh "ssh -o StrictHostKeyChecking=no -p $targetServerPort ubuntu@$targetServerIp 'ps -ef | grep java | grep -v grep | awk \'{print \$2}\' | sudo xargs kill -9 || echo \"No process found\"'"
// 새로운 JAR 파일 배포 및 애플리케이션 시작
sh "scp -o StrictHostKeyChecking=no -P $targetServerPort ${env.WORKSPACE}/build/custom-libs/${jarFileName} ubuntu@$targetServerIp:${deployPath}"
sh "ssh -o StrictHostKeyChecking=no -p $targetServerPort ubuntu@$targetServerIp '$runAppCommand'"
}
}
'🌥️Cloud Study🌥️ > TroubleShooting' 카테고리의 다른 글
[ Ansible ] DEPRECATION WARNING 해결 방법 (0) | 2024.08.22 |
---|---|
[ Jenkins ] 파이프라인 배포 : No such file or directory (0) | 2024.08.21 |
[ Prometheus ] active failed 오류 해결 (0) | 2024.08.09 |
[ NHN Cloud ] 파이프라인 배포 문제 해결 (0) | 2024.08.08 |
오류 : Web server failed to start. Port 8080 was already in use. (0) | 2024.07.24 |