Jenkins 원격 서버 배포(Publish Over SSH)

LeeKyoungChang·2023년 1월 12일
2
post-thumbnail

Jenkins와 github 연동을 한 후 진행해야 한다.

 

🔔 Jenkins와 배포 서버 구성을 한 서버에서 한다?

  • Jenkins와 github만 연동하여 배포, 실행하면 가능하다!
  • 배포할 서버가 여러대로 늘어날 경우, Jenkins 서버와 배포 서버를 분리할 경우, 한 개의 Jenkins 서버 빌드하여 모든 다른 서버에 SSH방식으로 파일 전송, 빌드 스크립트를 유발하여 관리가 가능하다.

 

✔️ 다운로드
bootJar을 SpringBoot build.gradle에 추가

bootJar{
	mainClassName = 'com.melon.boot.MelonApplication'
}

 

✔️ 배포할 서버가 여러대로 늘어나여, 젠킨스 서버와 배포 서버가 분리되어야 한다면, 각각 서버마다 jenkins를 설치해야할까?

  • 아니다. 한개의 젠킨스 서버 빌드하여 모든 다른 서버에 SSH방식으로 파일 전송, 빌드 스크립트를 유발하여 관리가 가능하다.

 

📚 1. Publish Over SSH 플러그인 검색 및 설치

Screenshot 2023-01-12 at 10 07 12 PM

Jenkins 관리 -> 플러그인 관리

 

Screenshot 2023-01-12 at 10 07 53 PM
  • Publish Over SSH 검색

 

 

📚 2. Publish Over SSH 플러그인 설정

Screenshot 2023-01-12 at 10 10 39 PM
  • Jenkins 관리 -> 시스템 설정

 

✔️ Publish over SSH 탭으로 이동하여 관련 내용 설정

Screenshot 2023-01-12 at 10 13 19 PM - Key : ec2를 생성할 때 받은 ssh 접속 키인 pem 파일내용을 복사하여 붙여 넣으면 된다.

 

✔️ SSH Servers

Screenshot 2023-01-12 at 10 13 45 PM
  • Name : 사용할 임의의 SSH ServersName을 입력하면 된다.
  • Hostname : 실제로 접속할 원격 서버 ip, 접속 경로를 입력
  • Username : 접속할 원격 서버의 user 이름
  • Remote Directory : 원격 서버에 접속하여 작업을 하게 되는 디렉토리

 

 

📚 3. Jenkins Job 설정

✔️ 빌드할 Item, Job 설정

Screenshot 2023-01-12 at 10 23 33 PM

본인의 Jenkins Item -> 구성

 

✔️ 빌드 후 조치 추가 클릭

Screenshot 2023-01-12 at 10 24 39 PM

 

✔️ Invoke Gradle script

Gradle 빌드를 위한 플러그인

을 추가하기 위해

Screenshot 2023-01-12 at 10 36 13 PM - Global Tool Configuration에서 gradle 추가 할 것이다. Screenshot 2023-01-12 at 10 37 32 PM - gradle 추가 Screenshot 2023-01-12 at 10 28 22 PM
  • 현재 gradle 7.6 버전

 

✔️ Post build task

빌드 로그를 판단해 batch/shell를 실행하는 플러그인
Screenshot 2023-01-12 at 10 28 28 PM

  • Log text(로그에 남길 텍스트)
  • script : nohup java -jar ~ &
  • Run script only if all previous steps were successful (성공적으로 실행될 경우)

 

나 같은 경우 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) GithubJenkins를 연동하여 소스를 당겨와서 최신화 및 빌드하기
(2) 빌드된 파일(Jar 또는 war) 을 원격 서버(ec2)에 전송하기. 이후 빌드 스크립트 실행

 

 


참고

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글