본문 바로가기
웹 개발/Jenkins

Jenkins java 자동배포를 위한 shell script

by 동배_ 2023. 12. 3.

아래는 jenkins에 ci/cd 구성시 execute shell 에 들어가는 스크립트 이다. 

# Find the PID of the process using port 1234
PID=$(lsof -t -i:1234 || echo "")

# If PID exists, kill it
if [ ! -z "$PID" ]; then
  echo "> 현재 구동중인 애플리케이션이 있습니다. 해당 pid를 삭제합니다"
  kill -9 $PID
fi

cp build/libs/fireplanner-0.0.1-SNAPSHOT.jar ~/fire-planner/server/fireplanner-application.jar

BUILD_ID=dontKillMe sh ~/fire-planner/server/deploy.sh

스크립트 내용은 아래와 같다. (GPT)

  1. 1234 포트를 사용하는 프로세스의 PID 찾기:
    • PID=$(lsof -t -i:1234 || echo ""): 이 줄은 1234 포트를 사용하고 있는 프로세스의 PID(Process ID)를 찾기 위해 lsof 명령어를 사용합니다.
      • lsof -t -i:1234: 1234 포트를 사용하는 프로세스를 찾고 -t 옵션을 사용해 PID만을 출력합니다.
      • || echo "": lsof 명령어가 실패할 경우(즉, 해당 포트를 사용하는 프로세스가 없을 경우) 빈 문자열을 반환합니다.
  2. 해당 PID가 존재하면 해당 프로세스 종료:
    • if [ ! -z "$PID" ]; then: 이 조건문은 $PID 변수가 비어있지 않다면(즉, PID가 있으면) 다음 명령을 실행합니다.
    • echo "> 현재 구동중인 애플리케이션이 있습니다. 해당 pid를 삭제합니다": 화면에 메시지를 출력합니다.
    • kill -9 $PID: kill 명령어로 해당 PID의 프로세스를 강제 종료합니다. -9 옵션은 강제 종료를 의미합니다.
  3. JAR 파일 복사:
    • cp build/libs/fireplanner-0.0.1-SNAPSHOT.jar ~/fire-planner/server/fireplanner-application.jar: build/libs 디렉토리에 있는 fireplanner-0.0.1-SNAPSHOT.jar 파일을 ~/fire-planner/server 디렉토리로 복사하며, 파일 이름을 fireplanner-application.jar로 변경합니다.
  4. 배포 스크립트 실행:
    • BUILD_ID=dontKillMe sh ~/fire-planner/server/deploy.sh: deploy.sh 스크립트를 실행합니다.
      • BUILD_ID=dontKillMe: 이는 Jenkins와 같은 CI(Continuous Integration) 도구에서 사용됩니다. Jenkins는 기본적으로 빌드가 완료된 후에 빌드 프로세스를 종료하는데, BUILD_ID=dontKillMe를 설정함으로써 이를 방지할 수 있습니다.
      • sh: 이는 deploy.sh 스크립트를 쉘을 통해 실행하라는 명령입니다.

댓글