Jenkins와 github 연동을 한 후 진행해야 한다.
🔔 Jenkins와 배포 서버 구성을 한 서버에서 한다?
- Jenkins와 github만 연동하여 배포, 실행하면 가능하다!
- 배포할 서버가 여러대로 늘어날 경우, Jenkins 서버와 배포 서버를 분리할 경우, 한 개의 Jenkins 서버 빌드하여 모든 다른 서버에 SSH방식으로 파일 전송, 빌드 스크립트를 유발하여 관리가 가능하다.
✔️ 다운로드
bootJar을 SpringBoot build.gradle에 추가
bootJar{
mainClassName = 'com.melon.boot.MelonApplication'
}
✔️ 배포할 서버가 여러대로 늘어나여, 젠킨스 서버와 배포 서버가 분리되어야 한다면, 각각 서버마다 jenkins를 설치해야할까?
Jenkins 관리 -> 플러그인 관리
✔️ Publish over SSH 탭으로 이동하여 관련 내용 설정
- Key : ec2를 생성할 때 받은 ssh 접속 키인 pem 파일내용을 복사하여 붙여 넣으면 된다.
✔️ SSH Servers
Name
: 사용할 임의의 SSH Servers
의 Name
을 입력하면 된다.Hostname
: 실제로 접속할 원격 서버 ip, 접속 경로를 입력Username
: 접속할 원격 서버의 user 이름Remote Directory
: 원격 서버에 접속하여 작업을 하게 되는 디렉토리
✔️ 빌드할 Item, Job 설정
본인의 Jenkins Item -> 구성
✔️ 빌드 후 조치 추가 클릭
✔️ Invoke Gradle script
Gradle 빌드를 위한 플러그인
을 추가하기 위해
- Global Tool Configuration에서 gradle 추가 할 것이다. - gradle 추가
✔️ Post build task
빌드 로그를 판단해 batch/shell를 실행하는 플러그인
nohup java -jar ~ &
나 같은 경우 Send build artifacts over SSH 를 추가하지 않았다.
✔️ 스프링 부트 빌드 sh 예제
#!/bin/bash
REPOSITORY=/home/ubuntu/app/repository
PROJECT_NAME=study_jenkins/jenkins
echo "> 프로젝트에 있는 경로로 이동 "
cd $REPOSITORY/$PROJECT_NAME/
echo "> REPOSITORY 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "$CURRENT_PID"
if [ -z $CURRENT_PID ]; then
echo "> no ing app."
else
echo "> kill -9 $CURRENT_PID"
kill -9 $CURRENT_PID
sleep 3
fi
echo "> 새로운 app"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
=> 다만 이 소스를 실행할 경우 pull 작업이 진행되지 않는다.
=> 그래서 이를 사용하지 않았다.
✔️ 현재
(1) Github
과 Jenkins
를 연동하여 소스를 당겨와서 최신화 및 빌드하기
(2) 빌드된 파일(Jar 또는 war) 을 원격 서버(ec2)에 전송하기. 이후 빌드 스크립트 실행
참고