Jenkins 개요
Jenkins 개요

Jenkins 개요

Tags
Jenkins
Infra
CI/CD
Published
August 11, 2025
Author
lkdcode

🎯 Jenkins?

Jenkins 는 소프트웨어 개발을 자동화하는 오픈소스 도구이다. 특히 CI/CD(지속적 통합/지속적 배포)를 구현하는데 사용된다. 개발자가 코드를 수정할 때마다 빌드 → 테스트 → 배포 과정을 자동화해주며, 쉽게 말해 "개발 -> 서버에 배포" 를 버튼(트리거) 한 번으로 끝내는 도구이다.
notion image
 
Github 에서 발생하는 이벤트들을 기반으로 어떤 파이프 라인을 실행할 지 설정할 수 있으며, Github 외에도 웹훅/HTTP 호출만 보낼 수 있으면 언제든 젠킨스의 파이프 라인을 실행시킬 수 있다. 개발 환경 배포, 프로덕션 환경 배포, 온-프라미스 환경 배포 이렇게 각각의 환경이 존재하더라도 Pipeline 을 잘 구축하면 편리하고 손쉽게 배포할 수 있다.
 

🎯 시나리오

개발 환경, 프로덕션 환경, 온-프라미스 환경 이렇게 3가지의 환경을 구성하고 트리거로 Github-Webhook 을 사용한다. 개발 환경은 개발자들이 개발한 소스 코드를 병합하고 프로덕션 전의 환경을 의미하며 프로덕션 환경은 실 사용자들이 사용할 환경이다. 마지막으로 릴리즈 환경은 온-프라미스에 설치한다는 가정을 하여 프로젝트를 zip 파일로 압축 후 Slack 에 전송해주는 구성이다.
 
다시 요약하면,
Github Webhook 을 통해 젠킨스의 트리거를 나눈다.
  • dev-브랜치 병합시 DEV_pipeline 실행
  • prod-브랜치 병합시 PROD_pipeline 실행
  • release 발생시 RELEASE_pipeline 실행
 
위의 그림과 같이 각각의 파이프 라인은 다음과 같은 기능을 수행한다.
  • DEV_pipeline : 개발 서버에 프로젝트 배포
  • PROD_pipeline : AWS 서버에 프로젝트 배포
  • RELEASE_pipeline : 프로젝트를 빌드 후 압축 파일로 만들어 Slack 에 전송
 

🎯 Github Webhook

Github 저장소에서 이벤트가 발생했을 때 외부 서버로 알림을 보내주는 기능이다. Jenkins 뿐만 아니라 이벤트가 발생했을 때 다양하게 활용할 수 있다. push, pull, release issue 등과 같은 이벤트들을 통해 핸들링할 수 있으며 전송 body 를 참고하면 다양한 값들이 들어 있는 것을 확인할 수 있다.
예를 들어 my-server-api 레파지토리에서 dev 브랜치에 병합이 발생한 경우 Jenkins 파이프라인을 실행하라는 트리거가 될 수 있다. (Jenkins 로 HTTP POST 요청을 보내고 결과적으로 Jenkins 의 파이프라인을 트리거하게 됨.)
 
notion image
devprod 는 병합 이벤트가 발생할 때마다 배포 트리거가 동작하도록 구성할 예정인데, 단순 병합(배포를 원치 않는 경우)을 위해 트리거 조건에 label 을 추가해준다. Webhook 바디에 label 정보도 받을 수 있으며 특정 label 과 함께 이벤트가 발생할 때 트리거 조건으로 사용할 수 있다. label 은 기본 제공되는 것외에도 커스터마이징할 수 있다.
 

🎯 .jenkinspipeline

파이프 라인은 Jenkins 가 수행할 작업 순서를 의미하는데 .jenkinspipeline 파일을 통해 사용자는 상황에 알맞게 파이프 라인을 정의할 수 있다. 예를 들어 빌드 → 테스트 → 도커 이미지 → 컨테이너 실행 등이 해당된다. Jenkins 내부에서 파이프라인 스크립트를 직접 작성할 수 있지만, 코드로 관리할 경우 버전 추적, 롤백 등 더 유용하다. 설치된 Jenkins 가 삭제된 경우에도 스크립트만 있으면 금방 다시 구축할 수 있다.
 

🎯 Git SCM

원격 레파지토리에서 파이프라인 스크립트를 관리한다면, Jenkins 가 접근할 수 있도록 권한을 설정해주어야 스크립트를 가져올 수 있다. Jenksin 는 해당 레파지토리에 특정 파일 xxx.jenkinsfile을 읽어 파이프라인을 수행하게 된다.
 

🎯 Production 과 Develop

개발 환경과 운영 환경을 구분하는 것은 중요하다. 운영 환경은 실제 사용자가 접속하여 사용할 환경이므로 보안과 안정성이 중요하고 각 개발자들의 결과물을 통합하는 과정이 필요하므로 개발 환경 역시 중요하다. 가능한 운영 환경과 가장 유사한 환경으로 개발 환경을 구축해 놓고 기능들을 테스트하는 것을 선호한다.
 

🎯 Window 와 Linux

배포할 서버의 운영체제가 중요하다. 대부분 배포 서버는 Linux 이며 개발 환경은 사용자에 따라 Window, Mac 등을 사용하는데 현재 시나리오에서는 zip 파일은 Window 에 Prod 환경은 Linux 개발 환경은 macOS 라고 가정한다.
 
위의 내용을 다시 총 정리한다.
notion image
 
  1. 개발자는 깃허브에 Push, Merge, Releases 등을 통해 이벤트 발생
  1. 발생된 이벤트를 통해 Webhook 수행
  1. 젠킨스는 외부 저장소에 저장된 .jenkinsfile 을 읽어온다.
  1. .jenkinsfile 에 작성된 파이프 라인을 수행한다