아래는 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)
- 1234 포트를 사용하는 프로세스의 PID 찾기:
- PID=$(lsof -t -i:1234 || echo ""): 이 줄은 1234 포트를 사용하고 있는 프로세스의 PID(Process ID)를 찾기 위해 lsof 명령어를 사용합니다.
- lsof -t -i:1234: 1234 포트를 사용하는 프로세스를 찾고 -t 옵션을 사용해 PID만을 출력합니다.
- || echo "": lsof 명령어가 실패할 경우(즉, 해당 포트를 사용하는 프로세스가 없을 경우) 빈 문자열을 반환합니다.
- PID=$(lsof -t -i:1234 || echo ""): 이 줄은 1234 포트를 사용하고 있는 프로세스의 PID(Process ID)를 찾기 위해 lsof 명령어를 사용합니다.
- 해당 PID가 존재하면 해당 프로세스 종료:
- if [ ! -z "$PID" ]; then: 이 조건문은 $PID 변수가 비어있지 않다면(즉, PID가 있으면) 다음 명령을 실행합니다.
- echo "> 현재 구동중인 애플리케이션이 있습니다. 해당 pid를 삭제합니다": 화면에 메시지를 출력합니다.
- kill -9 $PID: kill 명령어로 해당 PID의 프로세스를 강제 종료합니다. -9 옵션은 강제 종료를 의미합니다.
- 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로 변경합니다.
- 배포 스크립트 실행:
- 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 스크립트를 쉘을 통해 실행하라는 명령입니다.
- BUILD_ID=dontKillMe sh ~/fire-planner/server/deploy.sh: deploy.sh 스크립트를 실행합니다.
댓글