본문 바로가기

혼자하는 프로젝트/Jenkins 으로 Spring boot 자동 배포하기

Jenkins 을 활용하여 Spring boot 를 자동배포 하기(1)

# 구성도

# 사전 준비사항

본인것이거나, 권한을 가지고 있는 GitHub repository에 올라간 Spring Boot 프로젝트

2021.11.21 - [JAVA/Spring] - IntelliJ와 GitHub 연동하기

 

IntelliJ와 GitHub 연동하기

- 일단 스프링 부트 프로젝트를 생성하기 위해 스프링 이니셜라이저 사이트로 이동한다. https://start.spring.io/ 아래와같이 서정하고 제너레이터를 클릭하여 파일을 다운받는다. - 인텔리J를 실행시

may9noy.tistory.com

1. 도커와 Jenkins을 설치하기

2021.11.17 - [CI | CD/Jenkins] - Jenkins 설치

 

Jenkins 설치

# Jenkins을 설치하는 과정에 대해서 알아보자. Jenkins 이란 Jenkins는 Java로 빌드 된 오픈 소스 CI (Continuous Integration) 및 CD (Continuous Delivery) 도구이며, Jenkins는 기본적으로 소프트웨어 프로젝..

may9noy.tistory.com

2021.04.07 - [AWS/Docker (도커)] - Docker 설치(1부)

 

Docker 설치(1부)

- 이전 설치에서 알아본 jupyter에서 터미널을 연다. - 도커는 하드디스크 용량을 많이 사용할 수 있으므로 df -h를 확인하여 설치전에 용량을 확보한다. - sudo apt update를 입력하여 최신버전으로 유

may9noy.tistory.com

2. Jenkins 에서 빌드하기

- Jenkins 메인 화면에서 새로운 Item을 클릭하여 새로운 빌드를 구성해보자.

- 이름을 Project-01 그리고 Freestyle project를 선택 후 하단에 OK를 클릭한다.

- General 탭에서 설명내용을 입력하고 GitHub project를 체크 후 Project url에는 Git hub 저장소 주소를 입력하자. 

- 소스 코드 관리 탭으로 이동하고, Git을 체크한다. 다시 한 번 Git 저장소 주소를 입력하고, Credential 란에 GitHub 아이디, 비밀번호를 입력한다. (필드가 여러 개가 있는데 Username, Password 필드만 사용하면 된다.)
Branches to build에는 빌드할 브랜치 명을 정확히 입력해야한다. 빌드 유발 설정까지 마치게 되면 이 브랜치에 새로운 커밋이 푸시될 때마다 자동 빌드를 하게 된다.

- 아래의 */main 이 아니고 */master 로 해야 됨 > 알고보니 master 는 local branch 이니셜같은거였음...

@da MINGW64 ~/Desktop/IntelliJ+Jenkins/AutoBuild (master)
$ git branch
  autobuild
* master
  new_branch

- 이 branch 의 소스들이 바로 서버에 특정 폴더로 업로드 됨 > 바로 Project-01 이라는 폴더에 업로드 됨

etcsw@etcsw-Virtual-Machine:/var/lib/jenkins/workspace$ ll
합계 24
drwxr-xr-x  6 jenkins jenkins 4096 11월 22 22:59  ./
drwxr-xr-x 21 jenkins jenkins 4096 11월 23 02:00  ../
drwxr-xr-x  3 jenkins jenkins 4096 11월 21 13:42  Jenkins-Build-Test/
drwxr-xr-x  2 jenkins jenkins 4096 11월 21 15:17 'Jenkins-Build-Test@tmp'/
drwxr-xr-x  7 jenkins jenkins 4096 11월 23 00:38  Project-01/
drwxr-xr-x  2 jenkins jenkins 4096 11월 23 00:38 'Project-01@tmp'/

- Project-01 폴더 리스트를 보면 아래와 같음...

etcsw@etcsw-Virtual-Machine:/var/lib/jenkins/workspace/Project-01$ ll
합계 52
drwxr-xr-x 7 jenkins jenkins 4096 11월 23 00:38 ./
drwxr-xr-x 6 jenkins jenkins 4096 11월 22 22:59 ../
drwxr-xr-x 8 jenkins jenkins 4096 11월 23 00:38 .git/
-rw-r--r-- 1 jenkins jenkins  444 11월 22 23:06 .gitignore
drwxr-xr-x 9 jenkins jenkins 4096 11월 22 23:51 .gradle/
drwxr-xr-x 5 jenkins jenkins 4096 11월 23 00:37 build/
-rw-r--r-- 1 jenkins jenkins  634 11월 22 23:06 build.gradle
drwxr-xr-x 3 jenkins jenkins 4096 11월 22 23:06 gradle/
-rwxr-xr-x 1 jenkins jenkins 8070 11월 23 00:38 gradlew*
-rw-r--r-- 1 jenkins jenkins 2674 11월 22 23:06 gradlew.bat
-rw-r--r-- 1 jenkins jenkins   26 11월 22 23:06 settings.gradle
drwxr-xr-x 4 jenkins jenkins 4096 11월 22 23:06 src/

- 어쨌든 branch는 로컬의 있는 이름으로 해주고, 로컬을 원격 저장소와 동기화 하니까~ 로컬 저장소에 있는 소스가 반영이 되는거 라고 보면 됨...

- 빌드 유발 탭에서는 GitHub hook trigger for GITScm polling 을 선택한다.

- 여기까지 설정 후 저장 > 메인페이지로 이동하자.

- 메인페이지 > Jenkins 관리 > ‘Global Tool Configuration 을 선택한다.

쭉 내려서 Gradle의 Gradle installations를 선택, 새 Gradle 설치를 추가한다. 이름은 식별하기 쉽게 짓는다. 그리고 저장을 한다.
(참고로 gradle 버전은 현재 빌드하는 IDE에 있는 버전과 맞추면 좋음 아래는 나의 gradle-wrapper.properties 의 버전임)

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


그 다음 메인으로 돌아가서 방금전에 만든 프로젝트를 선택하고, 좌측 메뉴에서 ‘구성’을 클릭하면 다시 설정을 이어서 계속한다.

- Build 탭에서 Add build step을 눌러 Invoke Gradle script를 선택하고, Use Gradle Wrapper를 선택한다.
Make gradlew executable에 체크 > 체크하지 않으면 퍼미션 에러가 발생한다.

- Wrapper location에는 ${workspace} 라 입력 > Tasks에는 빌드할 때 쓰는 명령어를 입력한다.
예를 들어 ./gradlew clean build 라는 명령어로 빌드하는 프로젝트라면 clean build 라 입력한다.
clean build는 tasks에 등록된 사람만 쓰셈 이것때문에 3시간동안 개고생함... 아래 오류가 계속 발생 했음... clean build 지우니까 바로 빌드 성공 함...!!

- 빌드에 성공한 모습 무려 39번의 빌드 테스트 후 성공함...

- 정상적으로 성공함.

- 웹훅(WebHooks) 추가하기

하지만 아직 Jenkins는 누가 GitHub 저장소에 커밋을 푸시했는지 인식하지 못한다. 이것을 인식하게 해 주려면 프로젝트 저장소에 웹훅을 추가해 줘야 한다.

- GitHub 저장소의 Settings > Webhooks에서 Add Webhook을 누른다.

- Payload URL에 http://(Jenkins 주소:포트)/github-webhook/을 입력, Content type에 application/json, 나머지 설정은 그대로 두고 Add webhook을 클릭하여 설정을 마무리한다. 이제 앞서 설정한 브랜치로 커밋을 날리면 자동으로 빌드가 시작된다.

- 너무 길어져서~ 다음편에 계속...