간단한 토이 프로젝트 - 4
목차
간단한 토이 프로젝트 - 0 (프로젝트 의도)
간단한 토이 프로젝트 - 1 (깃허브,슬랙 연동)
간단한 토이 프로젝트 - 2 (gcp 인스턴스 생성 / nginx, jenkins, mysql 설치)
간단한 토이 프로젝트 - 3 (springboot 게시판 생성)
간단한 토이 프로젝트 - 5 (nginx와 톰캣 연동)
목표
jenkins와 github webhook 및 자동 배포

의도
클라우드에 톰캣을 설치하지 않고 jar로 어플리케이션을 구동하면서 자동으로 배포하는 환경을 구성한다.
작업
1. 젠킨스와 깃헙간에 webhook 연동
1) jenkins instance에서 개인키/공개키 생성
ssh-keygen -t ed25519
2) 생성된 공개키(id_ed25519.pub)를 github > Settings > Deploy keys에 등록


3) github > Settings > Webhooks에 jenkins url 등록
* http://외부ip:8080/github-webhook/
** 만약 젠킨스 구동 ip를 변경했으면 8080이 아닌 젠킨스 구동 ip로 설정


4) 젠킨스 로그인

5) 좌측 Jenkins 관리 선택

6) Security 탭에서 Manage Credentials 선택

7) Jenkins -> Global credentials -> (좌측탭) Add Credentials 차례로 선택



8) Kind 옵션을 SSH Username with private key로 변경
생성된 개인키(id_ed25519)를 Key에 등록

9) 젠킨스 홈에서 좌측 새로운 Item 선택

10) Freestyle project 선택 후 새로운 Item 생성

11)

* Repository URL은 Github에서 확인
Credentials는 위에서 생성한 이름의 개인키 선택

* 브랜치명 확인할것 (ide로 깃허브에 공유하는것 대신 깃허브를 먼저 생성했을 경우 main일 수 있음)
* GitHub hook trigger for GITScm polling 선택


2. 메타데이터에 jenkins 공개키 등록
* 메타데이터 -> SSH 키 -> 수정 -> 항목 추가



3. api 인스턴스에서 deploy.sh 추가
REPOSITORY=/home/nullnull_kim
PROJECT_NAME=board
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "현재 구동중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo ">현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo ">kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
4. 깃허브 푸시 후 webhook -> build -> deploy 과정 확인