Jenkins를 이용한 자동화와 코드 품질 확보

SIMWOOHYUN·2025년 5월 14일
post-thumbnail

🧪 CI/CD 실습: Jenkins를 이용한 자동화와 코드 품질 확보

이번 포스트에서는 CL 도구(Continuous Integration/Delivery) 로서의 Jenkins를 활용하여, Kubernetes 클러스터 위에서 애플리케이션을 자동 배포하고, 테스트 및 코드 품질 검사를 통해 안정적인 개발 파이프라인을 구축해보았습니다.


🔧 1. CL 도구로서의 Jenkins

Jenkins는 오픈소스 기반의 CI/CD 자동화 서버입니다. 다음과 같은 특징이 있습니다:

  • 다양한 플러그인으로 확장 가능
  • GitHub, Docker, Kubernetes 등과 쉽게 연동
  • 파이프라인 기반의 유연한 Job 구성 가능

설치는 아래처럼 진행하였습니다 (Docker 기준):

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

☸️ 2. Kubernetes 클러스터 위 Jenkins 배포

보다 유연하고 확장성 있는 CI/CD 시스템을 위해 Jenkins를 Kubernetes 클러스터 상에 Helm Chart로 배포했습니다.

Helm을 통한 Jenkins 설치

helm repo add jenkins https://charts.jenkins.io
helm repo update

kubectl create namespace jenkins

helm install jenkins jenkins/jenkins -n jenkins -f values.yaml

포트포워딩으로 Jenkins UI 접근

kubectl port-forward svc/jenkins -n jenkins 8080:8080

🔁 3. Jenkins 파이프라인 구성 (Jenkinsfile)

Jenkins의 Jenkinsfile을 활용해 GitHub에서 코드를 가져오고, 테스트 및 도커 빌드 후 배포하는 자동화 파이프라인을 구성했습니다.

✅ Jenkinsfile 예시

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-user/your-repo.git'
            }
        }

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

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

        stage('Build Docker Image') {
            steps {
                sh 'docker build -t your-dockerhub-username/app-name:${BUILD_NUMBER} .'
            }
        }

        stage('Push to Registry') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'dockerhub', passwordVariable: 'PASS', usernameVariable: 'USER')]) {
                    sh '''
                      echo $PASS | docker login -u $USER --password-stdin
                      docker push your-dockerhub-username/app-name:${BUILD_NUMBER}
                    '''
                }
            }
        }

        stage('Deploy to Kubernetes') {
            steps {
                sh 'kubectl apply -f k8s/deployment.yaml'
            }
        }
    }
}

✅ 4. 단위 테스트 (Unit Test)

Node.js에서 jest 프레임워크를 활용하여 기본적인 단위 테스트를 구성합니다.

예시

function add(a, b) {
  return a + b;
}

module.exports = add;
const add = require('./add');

test('1 + 2 = 3', () => {
  expect(add(1, 2)).toBe(3);
});

실행

npm test

Jenkins 파이프라인에서 실패 시 자동으로 빌드 중단되도록 설정됩니다.


🧹 5. 코드 품질 확보 (ESLint + SonarQube)

ESLint 적용

npm install --save-dev eslint
npx eslint --init

Jenkins에서 ESLint 검사 추가

stage('Lint') {
    steps {
        sh 'npx eslint .'
    }
}

SonarQube 연동 (선택 사항)

  • Jenkins SonarQube 플러그인 설치
  • SonarScanner 설정 및 sonar-project.properties 작성
  • Jenkins에서 withSonarQubeEnv를 이용해 분석 가능

🏁 마무리

  • Jenkins는 코드 변경 시 자동으로 테스트, 빌드, 배포를 실행하는 CL 도구로 적합함
  • Kubernetes 클러스터와 함께 사용할 때 확장성과 유연성 확보 가능
  • 단위 테스트와 코드 품질 검사를 통해 신뢰할 수 있는 파이프라인 완성

실무에서도 위 흐름이 기본이며, 추후 GitHub Actions, GitLab CI로도 확장 가능합니다.

0개의 댓글