[SpringBoot + Gradle] JAR, Bitbucket, Jenkins 원격 배포 환경 구축

2021. 11. 11. 15:13·Project

기본 환경

  1. 프로젝트 서버 구성 완료(AWS instance 설정 및 Route53 도메인&호스팅 + JAVA 11)
  2. 젠킨스 서버 구성 완료(JAVA 11, Jenkins 설치 및 기본 설정 완료)
  3. Bitbucket Repository 구성 및 SourceTree 연동 완료

 

 

ㆍJenkins 접속 후 Jenkins 관리 > 플러그인 관리에서 해당 플러그인 설치

 

ㆍJenkins 관리 > Global Tool Configuration에서 본인 프로젝트에 맞는 항목의 버전 설정

 

 

ㆍ새로운 Item 에서 item name 입력 후 Freestyle project 선택 > OK

 

 

ㆍssh-keygen -t rsa -b 4096 -m PEM 를명령어를 이용해 RSA 형태의 SSH Key를 생성한다.

   - id_rsa는 private_key , id_rsa.pub는 public key이다.

 

ㆍBitbucket에서 Repository > Access Key > Add key를 눌러 위에서 생성한 public key를 넣어준다.

 

ㆍ 프로젝트 서버(target server)의 ~/.ssh/authorized_keys 파일에도 public key를 넣어준다.

 

ㆍJeonkins 관리 > 시스템 설정에서 Publish over SSH 항목을 찾아 Path to key 혹은 Key에 값을 입력해준다.

  (해당 항목이 없다면 관련 플러그인 설치)

 

ㆍ SSH Servers 항목에는 원격지의 정보를 입력해준다.

 - Name : 식별할 수 있는 이름 설정

 - Hostname : 원격지의 IP

 - Username : 원격지의 접속 계정명

 - Remote Directory : 원격 시작 디렉토리 절대경로

 

※ OPENSSL로 시작하는 SSH 키를 생성할 경우 아래와 같은 오류가 발생한다.

  - Access Denied 관련 오류는 .ssh는 700 key 파일들은 600 권한이 맞는지 확인한다.

 

 

ㆍ 기존에 새로운 Item으로 만들어놓은 아이템에서 구성을 클릭하고 소스 코드 관리에서 Bitbucket Repository Clone SSH를 통해 url을 가져온다.

 

 

ㆍ Credentials의 Add > Jenkins를 눌러 Kind는 아래와 같이 username은 자유롭게 설정하고 private key 를 기존에 Jenkins서버에서 생성했던 해당 키를 넣어준다.

※ Username은 접속하는 원격지의 계정명과 동일해야 ssh-site를 쓸 수 있다 (추측)

ㆍ 환경설정 > SSH sites 설정

 

어느 Branch에서 받을 것인지 경로를 설정한다. default는 */master
BItbucket을 사용하므로 bitbucketweb을 선택하고 URL을 입력한다.

 

ㆍSSH로 원격 shell script를 실행하기 위해서는 아래의 플러그인을 받아야한다 (재시작 필수)

 

 

ㆍ 프로젝트 > 구성 > 빌드유발에서 Build when a change is pushed to BitBucket 체크

 

ㆍ빌드 환경에서 Send files or execute commands over SSH after the builld runs 체크 후 데이터 입력

 - Source files : Jenkins 설치 시 기본 경로는 ubuntu 기준 /var/libs/jenkins/workspace/설정한 SSH ServerName/설정한 프로젝트 Name/ 이다.

 - Remove prefix : 원격지의 remote 경로가 동일하지 않다면 prefix경로를 지우고 jar파일명만 남긴다.

 - Remote directory : 기본 경로는 원격지에 접속하는 계정의 홈 디렉토리 (ex) /home/ubuntu )

 

ㆍ 구성 > Build > Add build step 에서 Invoke Gradle script를 추가한 후 아래처럼 추가한다.

 - ${workspace} 는 젠킨스 기본 workspace 경로이다.

 

ㆍ 빌드 후 조치에서 Send build artifacts over SSH를 추가한 후 원격지의 스크립트를 실행시킨다.

ㆍ 빌드 스크립트 예시

#!/bin/sh
SERVICE_NAME=dev-admin
PATH_TO_JAR=./wmc-0.0.1-SNAPSHOT.jar
PID_PATH_NAME=./dev-admin.pid
JAVA_OPT="--spring.profiles.active=dev"
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            sudo nohup java -jar $PATH_TO_JAR $JAVA_OPT 2>> /dev/null >> /dev/null &

            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stoping ..."
            sudo kill $PID;
            echo "$SERVICE_NAME stopped ..."
            sudo rm $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            sudo kill $PID;
            echo "$SERVICE_NAME stopped ...";
            sudo rm $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            sudo nohup java -jar $PATH_TO_JAR $JAVA_OPT 2>> /dev/null >> /dev/null &

            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac

'Project' 카테고리의 다른 글

[Jenkins] 멀티모듈 파이프 라인 (feat. Jenkinsfile)  (0) 2025.02.26
[QueryDSL] build.gradle 설정으로 cannot find symbol 오류 해결하기  (1) 2025.02.20
[Docker/docker compose] docker compose를 이용한 database 설치  (0) 2025.02.18
스터디용 링크모음  (0) 2021.05.17
관리자 풀스택 Migration 및 기능 개발일기  (0) 2021.03.30
'Project' 카테고리의 다른 글
  • [QueryDSL] build.gradle 설정으로 cannot find symbol 오류 해결하기
  • [Docker/docker compose] docker compose를 이용한 database 설치
  • 스터디용 링크모음
  • 관리자 풀스택 Migration 및 기능 개발일기
seowooJeong
seowooJeong
  • seowooJeong
    개발일기
    seowooJeong
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • FrontEnd (6)
      • BackEnd (6)
      • Project (6)
      • Algorithm (4)
        • JAVA (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • React
    • Spring
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    collection 리스트
    resultmap 중첩
    resultmap 리스트
    jeknins 파이프라인
    build.gradle querydsl
    숫자 반전
    Spring QueryDsl
    jenkinsfile
    숫자 거꾸로
    QueryDSL 오류
    숫자 알고리즘
    mybatis list
    spring msa cicd
    jenkins gitlab
    jenkinsfile 설정
    Java
    jQuery
    querydsl 환경설정
    gitlab ci/cd
    intellij querydsl
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seowooJeong
[SpringBoot + Gradle] JAR, Bitbucket, Jenkins 원격 배포 환경 구축
상단으로

티스토리툴바