지난 시간에는 쿠버네티스의 기본 개념과 실습을 진행했어요. 이번 시간에는 지속적 통합(CI) 도구인 젠킨스를 알아보고, 쿠버네티스 클러스터 환경에 설치하여 자동화 파이프라인을 구축하는 과정을 정리해 볼게요.
젠킨스(Jenkins)는 소프트웨어 개발 시 지속적 통합(CI)과 지속적 배포(CD) 환경을 구축해 주는 대표적인 오픈 소스 자동화 서버예요. 다수의 개발자가 수정한 코드를 지속적으로 통합하고 빌드, 테스트 과정을 자동화하여 코드의 결함을 빠르게 발견할 수 있도록 도와줘요. 수많은 플러그인을 지원하기 때문에 확장성이 매우 뛰어나다는 특징이 있어요.
쿠버네티스 환경에 젠킨스를 설치할 때는 매니페스트 파일(YAML)을 직접 작성하거나 헬름(Helm) 패키지 매니저를 활용할 수 있어요. 쿠버네티스 내부에서 젠킨스를 구동하면 컨테이너 기반으로 동작하므로 자원을 더 유연하고 효율적으로 관리할 수 있어요.
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- containerPort: 8080
설치를 완료하고 브라우저를 통해 접속한 뒤 초기 비밀번호를 입력해 관리자 계정을 생성하면 기본 설정이 마무리돼요.
이후 대시보드에서 새로운 항목(New Item)을 생성하여 파이프라인을 구성할 수 있어요. 프로젝트의 성격에 따라 UI 기반으로 단순한 빌드 작업을 설정하는 프리스타일(Freestyle) 프로젝트를 사용하거나, 코드로 빌드 과정을 상세하게 정의하는 파이프라인(Pipeline) 프로젝트를 선택하여 구성해요.
젠킨스 파이프라인은 소스 코드의 빌드, 테스트, 배포에 이르는 전체 흐름을 코드로 정의하는 기능이에요. 주로 Jenkinsfile 이라는 이름의 텍스트 파일로 작성하며, 읽기 쉽고 구조화된 선언적(Declarative) 문법을 사용하는 것이 일반적이에요.
pipeline {
agent any
stages {
stage('Build') {
steps {
echo '소스 코드를 빌드합니다.'
}
}
stage('Test') {
steps {
echo '테스트 코드를 실행합니다.'
}
}
stage('Deploy') {
steps {
echo '서버에 배포를 시작합니다.'
}
}
}
}
CI 파이프라인의 핵심은 코드가 메인 브랜치에 병합되기 전에 결함을 찾아내는 것이에요. 파이프라인의 빌드 단계 이후에 단위 테스트 스테이지를 추가하면, 개발자가 작성한 코드가 기존 로직을 망가뜨리지 않고 정상적으로 동작하는지 자동으로 검증할 수 있어요.
pipeline {
agent any
stages {
stage('Unit Test') {
steps {
sh 'npm install'
sh 'npm run test'
}
}
}
}
단위 테스트를 통과하더라도 코드의 가독성이 떨어지거나 잠재적인 버그, 보안 취약점이 존재할 수 있어요. 이를 방지하기 위해 파이프라인에 코드 정적 분석 단계를 추가해요. 프로젝트에 설정된 린트(Lint) 도구를 실행하거나 SonarQube 같은 정적 분석 서버와 연동하여 코드 품질을 지속적으로 관리해요.
pipeline {
agent any
stages {
stage('Code Quality Analysis') {
steps {
sh 'npm run lint'
// 필요한 경우 SonarQube 분석 스크립트를 이 곳에 추가해요.
}
}
}
}