끄적끄적 코딩일지

[Spring] Jenkins를 사용해 자동배포 구현하기 (1) 본문

Spring

[Spring] Jenkins를 사용해 자동배포 구현하기 (1)

BaekGyuHyeon 2022. 7. 16. 11:05

※항해 99를 진행하면서 배포할 서버로 나의 EC2를 사용하게 되었다. 그중에 Spring을 개발하는 사람은 나포함 3명이다. 그런데 내가 쓴 코드를 반영해서 배포할때는 괜찮은데 다른 사람이 쓴 코드를 배포할때는 

1. Github에서 해당 코드를 받음 (충돌이 일어나면 해결해야됨)

2. Intellij에서 bootJar으로 jar 파일 생성

3. EC2에 SSH 접속 및 FileZila(파일 업로드 프로그램)으로 접속

4. 기존 서버 종료

5. jar파일 업로드

6. 다시 Spring 서버 시작

......

그러다가 코드에 오류가 있으면 해당 부분을 맏은 팀원에게 전달하고 팀원이 해당 오류를 해결하면 다시 반복...

프리티어라도 나의 EC2서버니 다른사람에게 맏기기도 좀 그렇고 좋은 방법이 없나 고민하던 차에 CI/CD에 대하여 알게되었다.

 


CI/CD란?

CI(Continuous Integration : 지속적인 통합)란 빌드및 테스트 자동화 과정을 의미한다. 즉 몇명이 작업을 하던간에 새로운 코드 변경사항이 지속적으로 빌드 및 테스트되어 특정 저장공간에서 통합되므로 개발중 서로 충돌할 수 있는 문제를 해결한다.

 

CD(Contiuous Deployment : 지속적인 배포) 는 자동화 배포를 의미한다.자동화 단계에 따라 배포만 자동으로 되는 지속적인 배포(Continuous Deployment), 혹은 지속적인 서비스 제공(Continuous Delivery)를 의미한다.

두개의 차이점을 이해하기 위해서 EC2에 서버 프로그램을 올리고 자동화 배포를 구현했다고 하자.

Javascript기반의 Node.js나 react등의 서버는 코드가 변경되는데로 자동으로 변경사항이 서버에 적용되며 그 과정에서 서버가 재시작하지 않아도 된다. 즉 지속적인 서비스 제공이다.  하지만 Spring인경우 변경사항을 적용하는데 서버를 끄고 재시작하는 일정 시간이 필요하다. 때문에 단순한 지속적인 배포이다.

 

그렇다고 Spring에서 지속적인 서비스를 제공하지 못하는것은 아니다. Spring에도 무중단 배포는 있으며 이후에 다루도록 하겠다.


Jenkins란?

Jenkins란 위에서 알아본 CI/CD를 수행해주는 Java기반 툴이다.(아마 Spring이 사용된듯하다.) CI/CD말고 다른 여러 기능을 제공하지만 일단은 Spring으로 자동화 배포를 구현하는 방법을 알아보도록 하겠다.

 

Step 1. Java 설치하기

Jenkins를 실행하기 위해서는 Java의 설치가 필요하다. Jenkins는 글을 쓰는 시점에서 Java 8, 11, 17 버전만 지원하므로 해당 버전의 JDK를 설치하면 된다.(나는 Java 11으로 설치를했다.)


Step 2. Jenkins 설치

 

1. homebrew를 사용한 설치

brew install jenkins

2. ubuntu상에서 설치

 

# Jenkins Key 다운로드
$ wget -q -0 - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -

# Source.list에 추가
$ echo deb http://pkg.jenkins.io/debian-stable binary | sudo tee /etc/apt/sources.list.d/jenkins.list

# apt update
$ sudo apt-get update && sudo apt-get upgrade

# Jenkins 설치
$ sudo apt-get install jenkins

3. window상에서 설치

https://www.jenkins.io/download/

 

Jenkins download and deployment

Jenkins download and deployment The Jenkins project produces two release lines: Stable (LTS) and regular (Weekly). Depending on your organization's needs, one may be preferred over the other. See the links below for more information and recommendations abo

www.jenkins.io

해당 사이트에서 Window용 파일 다운로드후 exe 파일 실행

※ 윈도우 상에서는 자동으로 Java경로를 잡아주지 않기 때문에 Java 경로를 중간에 잡는 과정이 필요하다.

 

Jenkins는 Web 서버를 작동시키기 때문에 포트 지정이 필요하다. 기본값은 8080이며 window인경우 설치 과정에서, mac/ubuntu처럼 명령어로 설치하는경우에는 설치 이후에 설정파일을 수정하여 변경할 수 있다.


Jenkins가 설치되었다면 자동으로 서버가 시작되었을것이고 그렇지 않았다면

# brew
$ brew services start jenkins

# ubuntu
$ sudo systemctl start jenkins

  등의 명령어로 시작할 수 있다.

window는 시작-> services 으로 들어가면 서비스중에 Jenkins가 있을것이고 중지/ 시작 등을 할 수 있다.

 

설치 이후에 인터넷 브라우저에서 localhost:8080등으로 접속하면 아래의 창이 뜰 것이다.

위에 jenkins 설치 경로가 적혀있을텐데 해당 경로로 들어가서 initialAdminPassword 파일에 적혀있는 문자열 자체를 Ctrl+C, Ctrl+V 하면 된다.

 

그후에 어떤 플러그인을 설치할지 나오는데 잘 모른다며 그냥 install suggested plugins를 선택 하면된다.

이후 설치가 다 끝나면 계정을 생성하면 끝

 

 

일단 이번 글에서는 Jenkins를 설치하기까지 하고 다음에 이어서 프로젝트를 빌드하고 배포하는방법을 설명하도록 하겠다.