TY blog

Jenkins CI/CD Spring boot 배포 자동화 - CI 구축하기 본문

DevOps

Jenkins CI/CD Spring boot 배포 자동화 - CI 구축하기

주짓수하는 개발자 2024. 5. 8. 22:19
CI/CD 란?

1. 지속적 통합(Continuous Integration, CI)

  • 여러 명의 개발자가 작성한 코드를 정기적으로 통합
  • CI 시스템은 코드를 커밋할 때마다 자동으로 빌드 및 테스트를 수행하여 코드 베이스에 문제가 있는 부분을 빠르게 발견하고 수정할 수 있게 지원

2. 지속적 배포(Continuous Deployment or Continuous Delivery, CD)

  • CI의 결과물이 자동으로 배포 가능한 상태로 유지되며, 이를 자동으로 배포하는 과정

* CI/CD의 최종 목표는 빌드/테스트/배포를 자동화하여

개발자가 비즈니스 로직에 집중할 수 있게 하는 것이다. 

 

CI/CD 지원 툴로는 Github Action, travis ci, jenkins 중에서

설정이 복잡하지만 무료로 사용할 수 있는 jenkins를 사용하면서

저의 개인 웹 프로젝트의 CI/CD 배포 자동화 구축을 진행합니다.

 

 

Jenkins 배포 흐름도

 

Jenkins 배포 흐름도

 

Github에 Push가 감지되면 Jenkins 서버에 CI요청 후 Build 진행, 

생성된 jar파일을 EC2 서버로 전달하여 빌드, 자동화를 진행하며, 

Jenkins는 docker Container에 이미지를 받아 설치해 사용합니다. 

 

1. Docker에 Jenkins 설치 및 환경 구성하기

 

1. Jenkins 이미지 다운로드 
docker pull jenkins/jenkins:jdk17

2. Jenkins 볼륨 데이터 생성 (이름 : jenkins-data)
docker volume create jenkins-data

3. Jenkins 볼륨 설정 및 실행 (Port:8180, 항상 재시작)
docker run -d -p 8180:8080 -v /var/run/docker.sock:/var/run/docker.sock -v jenkins-data:/data --restart=always jenkins/jenkins

 

http://자신의 IP:8180로 Jenkins 웹 접근 

Jenkins 초기화면

비밀번호는 아래 명령어를 입력하면 확인된다.

sudo docker logs jenkins

 

플러그인 설치

 

플러그인 설치를 진행한다.

Jenkins 계정생성

 

사용할 계정을 입력하여 생성한다.

 

2. Jenkins와 Github 연동

 

1. Github Token 발급받기

https://sunhistory.tistory.com/29

 

깃허브 토큰정보 확인방법

프로젝트 IDE에서 깃허브 계정추가 시에나 로그인 시에 토큰이 사용된다. 항상 토큰이 어디 페이지에 있었는지 까먹어서 글을 남긴다. 1. 우측 상단 프로필 정보 클릭 후 Settings 클릭 2. 왼쪽 하단

sunhistory.tistory.com

범위 선택 옵션으로

repo, admin:org, admin:repo_hook을 설정

 

  • repo : 레포지토리의 읽기/쓰기 액세스를 제공
  • admin:org : 깃허브 조직(organization)에 대한 관리 권한을 제공
  • admin:repo_hook : 레포지토리 훅(리포지토리에 대한 웹훅)을 관리

 

2. Github Repository에 웹 훅 설정하기

 

webhooks 설정

 

배포 자동화할 프로젝트 Repository에 들어가 Setting > Webhooks 이동 후 우측 상단 Add webhook 버튼 클릭

Payload URL에는 세팅한 Jenkins 주소에 github-webhook/ 경로를 추가 후 URL 지정

EX) http://Jenkins 서버 ip:8080/github-webhook/

 

Add webhook 버튼 클릭해서 연결 진행

 

* 주의사항

자신이 세팅한 Jenkins 주소가 모든 IP에서 통신이 되어야 하며

AWS 세팅 시 인바운드 규칙 허용이 필요하다.

 

3. Jenkins Credentials(작업에 대한 인증정보) 생성

 

Jenkins 메인화면에서 Jenkins 관리 > Credentials 클릭

 

클릭 후 global 링크를 클릭해서 Add Credentials 버튼 클릭

 

Kind와 Scope 옵션은 기본값으로 두고 Username 에는 Github 사용자 이름 입력,

Password는 발급받은 액세스 토큰을 입력, ID / Description은 프로젝트를 구분할 수 있게 자유롭게 입력합니다.

 

* 주의사항 

토큰 만료일이 지나면 Jenkins 사용이 안 돼 만료일에 유의

 

4. Item 생성하기 

 

Jenkins 좌측 메뉴에 + 새로운 Item 클릭 후 메뉴 이동

 

Freestyle project 선택

 

Github 프로젝트 Repository 주소 입력

 

선택한 Branch에 push가 진행되면 

webhook이 발생하여 빌드를 진행할 수 있게 설정한다. 

 

3. 빌드 자동화 설정

 

 

Jenkins 메인화면에서 Jenkins 관리 > Tools 클릭

Gradle 도구를 프로젝트 배포 Gradle 버전에 맞게 세팅한다.

 

* 프로젝트 버전은 gradle/wrapper/gradle-wrapper.properties 

에서 확인 가능

 

추가해 주고 위에서 만들었던 Item을 수정하러 갑니다. 

Build Steps 단계에서 

추가한 Gradle Tool을 선택하고, Tasks에는 Build 명령어를 추가하고 저장합니다.

5. CI 설정 완료 및 테스트

 

우측에 프로젝트 실행버튼을 눌러 빌드를 진행할 수 있으며

빌드 기록을 확인할 수 있습니다.

 

 

정상적으로 Build가 진행됐으며 여기까지 설정단계가 CI 단계이고

글이 좀 길어져 CD 부분은 다음 글에서 다시 진행하겠습니다.

Comments