Jenkins - Spring boot 빌드

Kevin·2025년 1월 23일

Jenkins

목록 보기
2/3
post-thumbnail

서론

어느 순간부터 매번 직접 인텔리제이 등의 툴의 힘을 빌려 빌드 하고, 빌드 된 WAR 파일을 직접 Tomcat이나 Jeus 서버로 옮기고 서버를 재시동 해주어야 했던 일들이 익숙해 지기 시작했다.

분명 처음만 하더라도 “아 진짜 너무 불편하다… 언릉 자동화 툴 도입 해야지.” 라고 마음 먹었는데, 일에 치이고 우선적으로 도입 및 개발 해야 하는 것들이 있다는 핑계로 불편을 익숙함으로 처리하기 시작했다.

그러다 보니 이러한 불편함이 익숙해지면서 새로운 기술을 도입 하는데 꺼려해지기 시작했다.

이러한 모습을 없애보겠다는 하기와 같은 일념을 가지고 글을 작성한다.

`개발자란 불편이 습관이 들지 않도록 노력 해야 한다.`


프로세스

이번 글에서 젠킨스를 사용 하여 진행 하고자 하는 프로세스는 다음과 같다.

  1. Git에서 특정 브랜치로 push가 일어날 경우 Jenkins에 요청 전달
  2. Jenkins에서는 특정 브랜치의 소스 코드를 가져와서 빌드하기.

과정

이번 글에서는 젠킨스 사용법에 대해서 더욱 자세하고, 친절하게 다룬 글들이 많기에 그런 글들의 링크만 첨부 하고 과정은 간략하게 다룰 것이다.

  1. Jenkins 설치

제일 먼저 당연하게도 젠킨스를 설치 해야 한다.

나는 Docker를 사용하여 젠킨스를 컨테이너로 실행 하였고, 이 과정에서 빌드 된 결과물(jar) 파일을 편의성을 위해서 익명 볼륨을 사용하여 마운트 하였다.

docker pull jenkins/jenkins:lts
docker run -d -p 8077:8080 -v /var/jenkins_home --name jenkins -u root jenkins/jenkins:jdk11

익명 볼륨이란?

→ Docker에서 컨테이너를 실행할 때 명시적으로 이름을 지정하지 않은 볼륨을 의미하며, 이 때 Docker는 내부적으로 고유한 이름을 자동으로 생성하며 익명 볼륨은 컨테이너가 삭제 되어도 Docker 시스템에 존재한다.

# 1. Docker 볼륨 조회
docker volume ls
DRIVER    VOLUME NAME
local     595039bdf2611f1b3d8c48f1c59117de09c741a2d8d3a7e745990ced34b7a80f

# 2. 볼륨 name을 토대로 조회
docker volume inspect 595039bdf2611f1b3d8c48f1c59117de09c741a2d8d3a7e745990ced34b7a80f
[
    {
        "CreatedAt": "2025-01-20T21:55:02+09:00",
        "Driver": "local",
        "Labels": {
            "com.docker.volume.anonymous": ""
        },
        "Mountpoint": "/var/lib/docker/volumes/595039bdf2611f1b3d8c48f1c59117de09c741a2d8d3a7e745990ced34b7a80f/_data",
        "Name": "595039bdf2611f1b3d8c48f1c59117de09c741a2d8d3a7e745990ced34b7a80f",
        "Options": null,
        "Scope": "local"
    }
]

  1. Jenkins 컨테이너 접속

그 다음으로는 실행한 젠킨스 컨테이너의 터미널에 접속을 한다.

docker exec -it 컨테이너ID /bin/bash

  1. Jenkins 비밀번호 접속

터미널에 접속하여 아래 경로에서 cat initialAdminPassword 명령을 치면, 그 다음 단계에서 필요한 password를 얻을 수 있다.


  1. password 입력 및 기본 설정으로 Install

3단계에서 얻은 password를 사용하여 젠킨스를 unlock 시키고, 어드민 계정을 생성 해준다.


  1. Jenkins의 새로운 Item을 만들어준다.

이 때 Freestyle project로 Item을 생성한다.

Item이란?

→ 젠킨스에서 빌드, 컴파일, 배포 등 작업의 최소 단위를 의미하며 새롭게 정의할 작업을 칭한다.

Freestyle project이란?

→ 스타일의 자유도가 높은 방식이며, 브라우져에서 사용자가 GUI 형식으로 직접 설정값과 수행할 동작을 입력 할 수 있기에 젠킨스 경험이 부족한 사용자도 구성하기 쉽다.


  1. Github 연동

Jenkins로 관리할 Github 프로젝트의 url을 복사한다.

Git 계정 정보를 설정하고, add 한다.

이전에 복사한 Repository URL과 방금 추가한 계정 정보를 Credentials로 추가한다.

추가로 젠킨스 빌드가 관리 될 브랜치를 지정 해준다.

빌드 trigger는 Github hook trigger를 선택 해준다.

이제 Github hook을 통해서 특정 브랜치로 코드를 push 할 때 해당 코드를 가져온 후 진행 할 Shell Script를 작성 해준다.

여기서 나는 gradlew를 사용하여 소스코드를 빌드를 해서 jar 파일을 만들 것이다.


  1. Github에서 설정

이제 Github Project의 설정에서 Webhook을 추가 해준다.

이 때 주의 해야 할 점은 반드시 외부에서 접근 할 수 있는 경로를 Paload URL로 작성 해야 한다는 점과 URL 뒤에 /github-webhook/ 을 붙여주어야 한다는 것이다.

위의 과정들을 모두 마치면, 설정이 모두 끝났다.

이제 Github에서 특정 브렌치로 push를 할 때 자동으로 코드를 빌드 해주는 자동 배포 과정을 구현 한 것이다.

아래는 빌드 된 경로이다.


다음 목표

이번 글에서 매우 기초적인 Jenkins와 Github Webhook 사용법을 다뤘으니, 다음 Jenkins를 다룬 글에서는 Github Push시에 Spring boot의 Dockerfile을 재 빌드하고 실행 시키는 것까지 해보고자 한다.

파이팅 💪💪💪


참고 레퍼런스

https://sh970901.tistory.com/70

  • 맨 처음 jdk를 11버젼으로 다운 받아서 사용하여 JAVA 17을 사용하던 Spring boot 빌드시 충돌이 있었는데, 위 레퍼런스를 통해서 jdk 버젼을 업그레이드 하였다.

https://github.com/jojoldu/springboot-jenkins-docker-slack

  • 이번 글을 작성하는데 전반적으로 도움을 준 글이다.
  • 프로세스 및 간단한 용어들에 대해서도 다루고 있으니 젠킨스를 처음 접하는 사람도 큰 부담 없이 따라 할 수 있을 거라 생각한다.
profile
Hello, World! \n

0개의 댓글