Chris Devlog

[Jenkins] 배포하기 - feat.Oracle Cloud, Github, SHH 본문

DevOps/Jenkins

[Jenkins] 배포하기 - feat.Oracle Cloud, Github, SHH

Chris Dev Heo 2022. 10. 6. 12:36
반응형

Architecture


Architecture

 

준비물


1. Server

  • Jenkins용
  • Deploy용
  • 서버 접속용 key(Jenkins, Deploy)

 

Jenkins 플러그인 설치


1. Dashboard → Jenkins 관리 → 플로그인 관리

Dashboard -> jenkins 관리 -> 플러그인 관리

2. 설치 가능 -> 검색 (이미 설치된 경우 설치된 플러그인 목록에서 확인 가능)

 - Publish Over SSH

  - Readonly Parameter plugin

 - Git Parameter

 

시스템 설정


Dashboard → Jenkins 관리 → 시스템 설정

1. Publish Over SSH → SSH Servers

 - Name: 식별용 이름

 - Hostname: deploy server 공용 IP 주소

 - Username: ssh 접속 username

 - Remote Directory: 접속 후 기본 디렉토리

2. 고급... → key 입력(Deploy Server pem key)

 - Use password authentication, or use a different key 체크

 - Key: deploy 서버 접속용 key를 텍스트 편집기로 열어 안에 전체 내용을 복사하여 붙여준다

3. test Configuration 버튼을 눌러 Success 확인

 

Manage Credentials


 

1. Credentials 등록

 - Stores scoped to Jenkins 하위의 항목을 클릭하면 System으로 이동함

 - Add Credentials -> Github Access Token 등록

  • Kind: Username with password
  • Username: 깃허브 로그인 아이디
  • Password: 발급받은 Github Token
  • ID: Item에서 Git 설정 시 사용할 이름

 

Item 등록


1. Jenkins의 대시보드 → 새로운 Item

2. Item 이름 설정 → Freestyle project → OK

 

Item 설정


1. General

 - 설명: item에 대한 설명 입력

 - Github project Check! -> github project 주소 입력

 - 오래된 빌드 삭제 Check! -> 보관할 최대 개수 5

 - 이 빌드는 매개변수가 있습니다 Check! -> 매개변수 추가

  • Readonly String parameter(plugin 설치 시 사용 가능) -> Name / Default Value
    1. APP_PORT / 8100
    2. APP_NAME / mybook
    3. ENV / production
  • Git Parameter(plugin 설치시 사용가능)
    • Name: BRANCH
    • Parameter Type: Branch
    • Default Value: origin/production

2. 소스 코드 관리

Git Check!

 - Repositories

  • Repository URL: Github Project → Code → Clone → HTTPS Url

  • Credentials: Github Access Token 선택

 - Branches to build

  • Branch Specifier (blank for 'any'): Git Parameter에서 등록한 매개변수(${BRANCH}) 사용

 - Additional Behaviours

  • Update tracking submodules to tip of branch: remote기준 서브모듈의 변경된 내용을 업데이트

3. 빌드 유발

 - 사용 X

4. 빌드 환경

 - Send files or execute commands over SSH after the build runs

  • 빌드 실행 후 SSH를 통해 파일 보내기 또는 명령 실행
  • SSH Server -> Name: 서버명

  • Transfers
    • Source files: jenkins 서버 소스파일 위치
    • Remote prefix: remote 서버(Stage, Production)에서 제외할 경로
    • Remote directory: remote 서버 파일 위치
      • 실제 경로는 /home/opc/jenkins/deploy/${APP_NAME}
      • SSH설정 시에 Remote Directory를 /home/opc로 지정하였기 때문에 /jenkins/deploy/${APP_NAME}로 설정

  • Exec command: remote 서버에서 실행할 command 작성
echo "===================================================="
echo "> 서버 접속"

ROOT_DIR=/home/opc
APP_JAR_NAME=${APP_NAME}.jar

JENKINS_REMOTE_DIR=$ROOT_DIR/jenkins/deploy
JENKINS_JAR_FILE=$JENKINS_REMOTE_DIR/${APP_NAME}/*.jar

DEPLOY_DIR=$ROOT_DIR/deploy
APP_DEPLOY_DIR=$DEPLOY_DIR/${APP_NAME}
LOG_DIR=$ROOT_DIR/logs


echo "> APP 배포시작 ${APP_NAME}"
echo "> DEPLOY 디렉토리 정리 "
if [ ! -d $DEPLOY_DIR ] ; then
  mkdir $DEPLOY_DIR
fi
if [ -d $APP_DEPLOY_DIR ] ; then
   rm -rf $APP_DEPLOY_DIR
fi
mkdir $APP_DEPLOY_DIR
if [ ! -d $LOG_DIR ] ; then
  mkdir $LOG_DIR
fi


echo "> JAR 파일 카피 "
cp $JENKINS_JAR_FILE $APP_DEPLOY_DIR
JAR_NAME=$(basename $APP_DEPLOY_DIR/*.jar)


echo "> JAR Link"
ln -Tfs $APP_DEPLOY_DIR/$JAR_NAME $APP_DEPLOY_DIR/$APP_JAR_NAME


echo "> kill -15 `netstat -tnlp|grep ${APP_PORT}|gawk '{ print $7 }'|grep -o '[0-9]*'`"
kill -15 `netstat -tnlp|grep ${APP_PORT}|gawk '{ print $7 }'|grep -o '[0-9]*'`
sleep 5


echo "> $APP_JAR_NAME 시작 "
nohup java -jar -Dspring.profiles.active=${ENV} $APP_DEPLOY_DIR/$APP_JAR_NAME >> $LOG_DIR/${APP_NAME}.log 2>$LOG_DIR/${APP_NAME}-deploy-err.log &

sleep 90

echo "> APP 완료 ${APP_NAME}"
echo "===================================================="
  • 고급 - > Exec timeout (ms)
    • jenkins 서버가 요청 후 충분한 시간 동안 기다려줄 수 있도록 0(무제한)으로 변경

5. Build

 - Execute shell

  • Command: jenkins 서버에서 Build시 필요한 실행 정보 입력
  • 배포 시 Build가 먼저 실행되고 SSH Server → Exec command가 실행
echo ">> 전송할 폴더 생성"
mkdir -p before-deploy/${ENV}-${APP_NAME}

echo ">> jar 복사"
cp ./build/libs/*.jar before-deploy/${ENV}-${APP_NAME}/

 

빌드 진행

1. Dashboard → Item 선택

2. 파라미터와 함께 빌드

  1. Read Only 매개변수는 그대로 사용(수정 안됨)
  2. 빌드할 브랜치 선택 (미선택시 설정한 default branch로 빌드)

반응형

'DevOps > Jenkins' 카테고리의 다른 글

[Jenkins] 설치하기 - feat.Oracle Linux 8, Docker  (0) 2022.07.12