본문 바로가기
AI Journey/웹

Jenkins와 Kubernetes를 조합한 CI/CD 파이프라인

by 보눔비스타 2026. 1. 24.

1. Jenkins의 작동 메커니즘과 생태계

Jenkins는 다양한 외부 서비스들을 하나로 묶어주는 오케스트레이터(Orchestrator) 역할을 수행한다.

젠킨스의 전체적인 CI/CD 흐름은 다음과 같다.

 

  • SCM(Source Code Management) 연동: 젠킨스 파이프라인에서 SCM은 자동화의 트리거(Trigger) 역할을 한다. Webhook을 통해 코드 변경을 실시간으로 감지하고 작업 공간(Workspace)으로 소스를 가져온다.(Checkout)
  • CI(지속적 통합): 빌드 도구와 테스트 프레임워크를 통해 코드 품질을 검증하고 실행 가능한 아티팩트*를 생성한다.
  • CD(지속적 배포): 생성된 아티팩트를 레지스트리에 저장하고 최종 목적지인 서버나 클러스터에 배포한다.

💡아티팩트(artifact)란?
소스 코드를 컴파일, 빌드, 패키징한 후 생성되는 파일들을 통칭한다. 이 파일들은 실행 가능한 형태이거나, 다른 프로그램에서 참조할 수 있는 라이브러리 형태를 띤다.
- 배포 가능성: 소스 코드 그 자체로는 서버에서 실행할 수 없지만, 아티팩트는 서버에 올리면 즉시 실행될 수 있는 상태다. 
- 버전 관리: 각 빌드마다 고유한 버전 번호가 붙은 아티팩트가 생성되어 관리된다.

 

2. Declarative Pipeline 기반의 표준 스크립트

Jenkins Pipeline은 가독성이 높고 관리가 쉬운 Declarative(선언형) 방식이 주로 사용된다.

아래는 빌드, 테스트, 정적 분석을 포함하는 기본적인 Jenkinsfile 구조다.

 

[Groovy]

pipeline {
    agent any 
    environment {
        DOCKER_IMAGE = "my-app-repo/service-a"
        VERSION = "1.0.${BUILD_NUMBER}"
    }
    stages {
        stage('Build') {
            steps {
                sh './mvnw clean package -DskipTests'
            }
        }
        stage('Test') {
            steps {
                sh './mvnw test'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}

 

3. Kubernetes 환경으로의 확장

빌드된 결과물을 Docker 이미지로 만들고 Kubernetes 클러스터에 배포하기 위해 Jenkins는 kubectl 및 클러스터 인증 정보를 사용한다.

 

k8s 배포 핵심 스크립트

[Groovy]

stage('Docker Build & Push') {
    steps {
        script {
            docker.withRegistry('', 'docker-hub-credentials') {
                def appImage = docker.build("${REGISTRY}/${APP}:${TAG}")
                appImage.push()
            }
        }
    }
}

stage('Deploy to K8s') {
    steps {
        configFileProvider([configFile(fileId: 'k8s-config', variable: 'KUBECONFIG')]) {
            sh """
                sed -i 's|IMAGE_PLACEHOLDER|${REGISTRY}/${APP}:${TAG}|g' k8s/deployment.yaml
                kubectl --kubeconfig=${KUBECONFIG} apply -f k8s/deployment.yaml
                kubectl --kubeconfig=${KUBECONFIG} rollout status deployment/${APP}
            """
        }
    }
}

 

 

4. CI/CD 파이프라인을 구축할 때 고려할 것

CI/CD 파이프라인을 구축할 때 다음 세 가지를 반드시 고려해야 한다.

  1. 보안 관리: API 키나 클러스터 접속 정보는 절대 코드에 노출하지 말고 Jenkins Credentials 기능을 통해 관리한다.
  2. 전략적 배포: 단순 배포를 넘어 Helm을 이용한 패키징이나 ArgoCD를 활용한 GitOps 방식 도입을 검토한다.
  3. 피드백 루프: 빌드 실패 시 Slack이나 이메일로 즉각 알림이 가도록 설정하여 수정 시간을 최소화한다.

Jenkins와 Kubernetes의 조합은 복잡하지만, 한 번 제대로 구축해두면 개발 생산성이 훨씬 높아진다.

각 프로젝트의 규모와 특성에 맞춰 파이프라인을 점진적으로 고도화해 나가는 과정이 필요하다.