
지난 시간에는 쿠버네티스의 기본 개념과 실습을 진행했습니다. 이번 시간에는 지속적 통합(CI) 도구인 젠킨스(Jenkins)를 알아보고, 쿠버네티스 클러스터 환경에 설치하여 자동화 파이프라인을 구축하는 과정을 정리했습니다.
젠킨스(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을 생성하여 파이프라인을 구성할 수 있습니다. 프로젝트 성격에 따라 두 가지 방식 중 하나를 선택합니다.
| 프로젝트 유형 | 설명 |
|---|---|
| 프리스타일 (Freestyle) | UI 기반으로 단순한 빌드 작업을 설정합니다. |
| 파이프라인 (Pipeline) | 코드로 빌드 과정을 상세하게 정의합니다. |
젠킨스 파이프라인은 소스 코드의 빌드, 테스트, 배포에 이르는 전체 흐름을 코드로 정의하는 기능입니다. 주로 Jenkinsfile이라는 이름의 파일로 작성하며, 읽기 쉽고 구조화된 선언적(Declarative) 문법을 사용하는 것이 일반적입니다.
pipeline {
agent any
stages {
stage('Build') {
steps {
echo '소스 코드를 빌드합니다.'
}
}
stage('Test') {
steps {
echo '테스트 코드를 실행합니다.'
}
}
stage('Deploy') {
steps {
echo '서버에 배포를 시작합니다.'
}
}
}
}
파이프라인은 여러 개의 stage로 구성되며, 각 단계가 순서대로 실행됩니다. 특정 단계에서 실패하면 이후 단계는 실행되지 않아 문제를 빠르게 감지할 수 있습니다.
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 분석 스크립트를 이곳에 추가합니다.
}
}
}
}