티스토리 뷰

반응형

현재 젠킨스로 배치를 배포하며 특정 서버에 SSH 연결을 통해 jar 파일을 실행하는 구조로 배치가 수행되고 있습니다. 서버간 파일 이동을 줄이기 위해 타겟 서버에 Git Repository Clone을 진행해두고 그 상태에서 프로젝트를 자체 gradle build 를 통하여 jar 를 생성하고 있었습니다.

문제는 아래와 같이 로그가 jar 파일 실행 이후에도 로그가 계속 출력되고 있어서 젠킨스 아이템이 멈추지 않는 증상이었습니다.

정상적으로 실행된 배치 jar 파일
이후에 무한히 출력되는 프로세스 로그

 

그래서 이 부분을 어떻게 해결할지 고민을 하다가 백그라운드에서 배치를 실행시키는 옵션을 찾게되었습니다. 

기존에 사용하였던 run.sh 의 내용입니다.

As-is

!#/bin/sh
port=18085;
pid="$(sudo lsof -t -i :18085 -s TCP:LISTEN)";
module="Estate Batch";

if [ "$pid" != "" ]; then
          sudo kill -9 $pid;
            echo "$module $pid process kill complete"
    else
              echo "$module pid is empty"
fi

cd /home/ec2-user/프로젝트명
git pull
./gradlew clean build -x test

cd /home/ec2-user/프로젝트명/build/libs
PLAIN_JAR=$(sudo ls -ef | grep 'plain')
echo "${PLAIN_JAR}"
rm -rf ${PLAIN_JAR}
java --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -Duser.timezone=Asia/Seoul -Dspring.profiles.active=scrap -jar *.jar

 

그래서 맨 하단의 java 실행 옵션에 nohup 명령어를 주고 맨 끝쪽에 옵션을 걸었더니 정상적으로 종료되는 것을 확인할 수 있었습니다.

To-Be

!#/bin/sh
port=18085;
pid="$(sudo lsof -t -i :18085 -s TCP:LISTEN)";
module="Estate Batch";

if [ "$pid" != "" ]; then
          sudo kill -9 $pid;
            echo "$module $pid process kill complete"
    else
              echo "$module pid is empty"
fi

cd /home/ec2-user/프로젝트명
git pull
./gradlew clean build -x test

cd /home/ec2-user/프로젝트명/build/libs
PLAIN_JAR=$(sudo ls -ef | grep 'plain')
echo "${PLAIN_JAR}"
rm -rf ${PLAIN_JAR}
 nohup java --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -Duser.timezone=Asia/Seoul -Dspring.profiles.active=scrap -jar *.jar > /dev/null 2>&1 &

11번 까지는 젠킨스가 멈추지 않아 Abort 시키다가 12번째만에 성공했습니다

 

참조: https://oingdaddy.tistory.com/94

 

linux (jenkins shell)에서 springboot project backgroud로 실행하기

springboot 로 프로젝트를 구성하고 배포환경을 구성하였다. 이제 실행 스크립트만 작성을 하면 되는데 문제가 생겼다. 내장 was를 사용하기에 springboot 실행/중지 파일 (start.sh/stop.sh) 을 직접 만들어

oingdaddy.tistory.com

 

반응형
댓글
공지사항