반응형
젠킨스에서 배포 후 변경된 소스가 적용이 안되는 문제

 

 

1. 파이프라인 실행 확인

 

jenkins 에서 배포한 프로젝트는 

/var/lib/jenkins/workspace/yourProject/

경로에 저장이 된다. 

 

일단 이 경로에 내가 수정하고 commit 한 파일이 정상적으로 들어와 있는지 확인한다.

 

큰따옴표 앞뒤로 간격을 하나씩 벌려줬는데 정상적으로 파일이 들어와있었다.

 

그럼 일단 git webhook -> jenkins 로 정상적으로 프로젝트를 땡겨온걸 확인할 수 있다.

 

2. jar build 확인

 

 

젠킨스 Console output 을 확인해보니 빌드는 정상적으로 이루어져 있었고 프로젝트 내 
/var/lib/jenkins/workspace/ili_home/build/libs/ 경로에 정상적으로 jar 파일이 빌드 되어있었다.

 

jar 파일을 압축 해제하여 확인해보니 정상적으로 수정사항이 적용되어 있는걸 확인... 그럼 뭐가 문제니..;;;

 

3. shell script 확인

 

문제가 될만한 부분을 찾았다...!

 

fuser -k -n tcp 80

nohup java -jar -Dspring.profiles.active=prod /var/lib/jenkins/workspace/ili_home/build/libs/ili_web-0.0.1-SNAPSHOT.jar &

 

build 종료 후 이러한 shell 스크립트를 실행하게 되어있는데 

80 포트를 kill 하는 것과 

nohup 은 sudo 권한으로 실행해야한다. 

젠킨스에게 sudo 권한을 주는 건 아래 현민님의 블로그 참고...!

 

https://hyunmin1906.tistory.com/282

 

[Linux] Jenkins 에서 sudo 권한 사용

■ Jenkins 에서 sudo 권한 사용 해당 이슈를 해결하기 위해 또는 sudo 권한을 사용하기 위해서 Jenkins 에서 sudo 권한을 지정 이슈 : sudo: a terminal is required to read the password; either use the -S option to read from s

hyunmin1906.tistory.com

 

적용 후 Post build task 에

 

PID=$(sudo netstat -tnlp | grep ':80' | awk '{print $7}' | awk -F'/' '{print $1}')
echo "찾은 PID: $PID"
# PID가 정상적으로 찾아졌는지 확인
if [ -n "$PID" ]; then
    echo "80번 포트를 사용하는 프로세스($PID) 종료 중..."
    sudo kill -9 $PID
    
else
    echo "종료할 프로세스를 찾지 못했습니다."
fi

sudo nohup java -jar -Dspring.profiles.active=prod /var/lib/jenkins/workspace/프로젝트/build/libs/당신의자르파일.jar &

 

작성하니 깔끔하게 push 후 build 한 jar 파일 배포까지 완료되었다.

반응형