[Jenkins] Spring 프로젝트 jar 배포환경 구성하기

들어가며

 

기존에 war로 빌드해서 배포되고있는 Spring boot 프로젝트를 jar로 빌드해서 배포할 수 있는 jenkins 환경을 구성해보고자 한다.

 

아무래도 war로 빌드하면 별도의 톰캣을 구축해서 그 위에 배포해야하지만 Spring boot의 내장 톰캣을 사용하면 설정이 간단하고 유지보수도 편할것같아 변경하기로 했다.

 

 

설정 해야할 목록

 

설정 해야할 목록은 다음과 같다.

 

  • Publish Over SSH 설정 및 Jenkins에서 접근하고자하는(배포하고자하는) 서버 등록
  • 빌드할 Github repository branch를 가져오도록 설정
  • 빌드전 수행 할 내용 설정
  • 빌드 설정
  • 빌드 후 조치 내용 설정

 

 

Publish Over SSH 설정 및 Jenkins에서 접근하고자하는(배포하고자하는) 서버 등록

 

1. Jenkins 관리 > 시스템 설정으로 진입한다.

 

 

 

2. Publish over SSH 설정 (해당 설정이 보이지 않는다면 Publish Over SSH 플러그인을 설치하면된다.)

 

 

Jenkins가 다른서버와 SSH 방식으로 접근하기 위해서는 Jenkins는 비대칭 키의 private key를, 다른 서버는 public key를 소유하고 있어야한다. 따라서 설정 내용은 다음과 같다.

 

Passphrase : key gen에 사용된 passphrase 가 있다면 입력해준다. 없다면 내버려둔다.

Path to key : jenkins 서버내에 private key를 가지고 있다면 private key 경로를 적어준다.

Key : jenkins 서버내에 private key가 없고 따로 가지고있다면 private key의 내용을 삽입해준다. (나는 서버 인스턴스 생성시 발급받은 .pem 파일의 내용을 적어줬다.)

 

SSH Servers - Name :  Job 생성 및 설정시 해당 설정 내용을 식별할 이름을 적어준다.

SSH Servers - Hostname : jenkins가 접근할 서버의 호스트명을 적어준다.

SSH Servers - Username : 직접 서버 접근시 ssh <username>@hostname 이렇게 접근할 텐데 @앞에 <username>을 그대로 적어준다.

 

 

이제 Job을 하나 생성해서 설정을 진행한다.

 

 

빌드할 Github repository 가져오도록 설정

 

해당 내용은 아래의 내용에 존재하니 생략한다.

https://hwannny.tistory.com/89

 

[Jenkins] Jenkins로 자동 빌드 배포 환경 구축하기

들어가며 회사에서는 이미 빌드 배포환경이 구축되어있기 때문에 구축해볼 기회가 없어 사이드프로젝트에 직접 구축해보면 좋을것같아 구축한 내용을 포스팅하고자한다. 해당 포스팅은 다음

hwannny.tistory.com

 

 

빌드전 수행할 내용 설정

 

빌드 및 jar 실행(배포)를 실행하기에 앞서 기존에 8080포트를 사용하면서 구동되고 있는 톰캣을 중지시켜줘야한다.

 

war 를 톰캣에다가 배포했다면 서버를 임의로 종료하기 위해서는 $TOMCAT_HOME/logs/bin/shutdown.sh 경로의 스크립트를 실행하면 되지만 내장 톰캣으로 구동되는 jar로 배포한다면 서버를 종료하기 위해서 일반적으로 서버 구동시 pid 미리 저장해두고 종료가 필요한 시점에 해당 pid 값으로 kill -9 를 진행한다.

 

 

build 전에 수행되는 Pre build script 내용은 kill -9 할 pid 존재한다면 kill -9 하는 간단한 내용이다.

 

그리고 서버 구동시 pid를 자동으로 생성하기 위해 다음과 같이 설정해준다.

 

1. application.yaml 또는 properties에 서버 구동시 사용되는 프로세스 ID를 /home/centos/boot.pid 파일에 기록되도록 설정한다.

spring:
    pid:
       file: /home/centos/boot.pid

 

2. Application listeners 목록에 ApplicationPidFileWriter를 등록해준다.

@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(MyApplication.class);
        application.addListeners(new ApplicationPidFileWriter());
        application.run(args);
    }
}

 

 

추가적으로 SSH site 설정은 아래의 내용에 존재하니 생략한다.

https://hwannny.tistory.com/90

 

[Jenkins] Jenkins에서 원격서버내에 shell script 실행 시키기

들어가며 Jenkins 서버가 원격 배포하는 서버에 배포과정에서 shell script를 실행할 필요가있어 정리하고자 포스팅한다. Credential 추가 Jenkins 서버가 원격 배포하는 서버에 shell script를 실행하기 위해

hwannny.tistory.com

 

 

빌드 설정

 

해당 내용은 아래의 내용에 존재하니 생략한다.

https://hwannny.tistory.com/89

 

[Jenkins] Jenkins로 자동 빌드 배포 환경 구축하기

들어가며 회사에서는 이미 빌드 배포환경이 구축되어있기 때문에 구축해볼 기회가 없어 사이드프로젝트에 직접 구축해보면 좋을것같아 구축한 내용을 포스팅하고자한다. 해당 포스팅은 다음

hwannny.tistory.com

 

 

빌드 후 조치 내용 설정

 

 

SSH Server - Name : jenkins에서 build된 jar파일을 어떤 서버에 업로드할지 결정한다. 이 포스팅에서 가장 첫번째 내용인 Publish over SSH > SSH Servers 설정을 적용한다.

 

Transfer Set - Source files : jenkins 서버 내에서 빌드가완료된 jar 파일 경로를 적어준다.

Transfer Set - Remove prefix : jar 파일 이외에 다른 내용이 배포 서버에 업로드되는건 원치 않을것이다.  살짝 헷갈리는데 target 을 적어주면 target 폴더 내 전체 내용이 아닌 jar 파일만 배포된다.

 

Transfer Set - Exec command : jar 파일을 업로드 후 실행시켜줄 커맨드를 입력해준다.

  • jar 실행 후 백그라운드에서 돌게하기 위해 nohup를 사용했다.
  • 서버 로그의 내용을 log.out 파일에 append 되도록 지정한다.