pgms

[15주차] - [9기] 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 10회차 - 68

Ejah 2026. 4. 22. 19:51

Jenkins로 시작하는 CI 파이프라인 구축기

📌 들어가며

프로젝트를 진행하면서 느낀 가장 큰 문제 중 하나는
**“코드가 잘 돌아가는지 매번 수동으로 확인해야 한다”**는 점이었다.

이 문제를 해결하기 위해 도입한 것이 바로 CI (Continuous Integration),
그리고 그 중심에는 Jenkins가 있었다.

이번 글에서는 Jenkins를 활용해
CI 파이프라인을 구축하는 과정을 정리해보려고 한다.


🧩 CI 도구로서의 Jenkins

Jenkins는 대표적인 오픈소스 CI/CD 도구로,
다음과 같은 역할을 수행한다.

  • 코드 변경 감지 (Git 연동)
  • 자동 빌드
  • 테스트 실행
  • 결과 피드백 제공

즉, 개발자가 코드를 push하면
Jenkins가 알아서 “문제 없는 코드인지” 검증해주는 구조다.


⚙️ k8s 클러스터에 Jenkins 설치

단순 로컬이 아닌,
Kubernetes 환경에 Jenkins를 올리는 경험을 해봤다.

왜 k8s에 Jenkins를 올릴까?

  • 확장성 (Pod 단위로 관리 가능)
  • 안정성 (자동 재시작)
  • DevOps 환경에 자연스럽게 통합

설치 방식

  • Helm Chart 사용
  • Persistent Volume 연결
  • Service / Ingress 설정

👉 이 과정을 통해
실제 서비스 환경과 유사한 CI 환경을 구성할 수 있었다.


🛠 Jenkins 기본 사용법

Jenkins를 처음 쓰면 UI가 꽤 낯설다.

핵심 개념은 크게 3가지다:

  1. Job (프로젝트 단위 작업)
  2. Build (실행 결과)
  3. Pipeline (자동화 흐름)

특히 중요한 건 Pipeline이다.


📦 Jenkins 프로젝트 설정

프로젝트 설정 시 핵심 포인트:

  • Git Repository 연결
  • Branch 설정 (main / develop 등)
  • Webhook 연동 (자동 실행)

👉 GitHub에 push 하면 Jenkins가 자동 실행되도록 구성


🔄 간단한 Jenkins 파이프라인

Jenkins Pipeline은 보통 이런 흐름이다:

 
pipeline {
agent any

stages {
stage('Install') {
steps {
sh 'npm install'
}
}

stage('Test') {
steps {
sh 'npm test'
}
}

stage('Build') {
steps {
sh 'npm run build'
}
}
}
}
 

👉 핵심은 단계별 자동화

  • 설치
  • 테스트
  • 빌드

이 모든 과정이 자동으로 수행된다.


🧠 CI 파이프라인 기초

CI 파이프라인의 핵심 목적은 단 하나다.

"코드가 깨지지 않도록 보장하는 것"

이를 위해 다음을 반드시 포함해야 한다:

  • 자동 테스트
  • 빌드 검증
  • 빠른 피드백

🧪 단위 테스트 자동화

CI에서 가장 중요한 단계는 테스트다.

왜 중요한가?

  • 코드 변경 시 안정성 확보
  • 버그 조기 발견
  • 리팩토링 안전성 확보

Jenkins에서는 테스트 실패 시:

👉 빌드 자체를 실패 처리

즉, 문제가 있는 코드는 배포되지 않는다.


🧹 코드 품질 확보

단순히 "동작"하는 것만으로는 부족하다.

그래서 추가한 단계:

  • ESLint
  • Prettier
  • 코드 스타일 검사
 
npm run lint
 

👉 CI에서 자동 실행 → 코드 품질 강제


🔥 느낀 점

Jenkins를 도입하면서 가장 크게 느낀 변화는 이것이다:

✅ Before

  • 수동 테스트
  • 배포 전 불안감
  • 실수 가능성 높음

✅ After

  • 자동 검증
  • 빠른 피드백
  • 안정적인 배포

🎯 마무리

Jenkins 기반 CI는 단순한 자동화가 아니라

개발 문화를 바꾸는 도구라고 느꼈다.

특히 팀 프로젝트에서는

  • 코드 신뢰도 상승
  • 협업 효율 증가
  • 배포 안정성 확보

라는 큰 장점이 있다.