Tan Kim

jenkins

Jenkins

오픈소스 자동화 서버. CI/CD 파이프라인을 구성해 빌드, 테스트, 배포를 자동화한다.

핵심 개념

개념 설명
Job 자동화 작업 단위
Pipeline 여러 스테이지로 구성된 자동화 흐름
Stage 파이프라인 내 단계 (Build, Test, Deploy 등)
Step 각 Stage 내 실행 명령
Agent 파이프라인을 실행할 노드
Credential 비밀번호, 토큰 등 민감 정보 저장
Webhook Git 이벤트 감지해 자동 트리거

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any
 
    environment {
        IMAGE_NAME = "myapp"
        REGISTRY   = "registry.example.com"
    }
 
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
 
        stage('Build') {
            steps {
                sh 'npm ci'
                sh 'npm run build'
            }
        }
 
        stage('Test') {
            steps {
                sh 'npm test'
            }
            post {
                always {
                    junit 'test-results/*.xml'
                }
            }
        }
 
        stage('Docker Build') {
            steps {
                sh "docker build -t ${REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER} ."
            }
        }
 
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                withCredentials([usernamePassword(
                    credentialsId: 'registry-creds',
                    usernameVariable: 'USER',
                    passwordVariable: 'PASS'
                )]) {
                    sh "docker login -u $USER -p $PASS ${REGISTRY}"
                    sh "docker push ${REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}"
                }
                sh "kubectl set image deployment/myapp myapp=${REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}"
            }
        }
    }
 
    post {
        success {
            echo '배포 성공'
        }
        failure {
            echo '파이프라인 실패'
            // slackSend channel: '#alerts', message: "빌드 실패: ${env.JOB_NAME}"
        }
    }
}

주요 플러그인

플러그인 용도
Git Git 저장소 연동
Pipeline Declarative Pipeline 지원
Docker Pipeline 파이프라인에서 Docker 사용
Kubernetes K8s 에이전트 동적 프로비저닝
Credentials 민감 정보 관리
Slack Notification Slack 알림
Blue Ocean 파이프라인 시각화 UI

GitHub Webhook 연동

  1. Jenkins Job → Build Triggers → GitHub hook trigger for GITScm polling 체크
  2. GitHub 저장소 → Settings → Webhooks → Add webhook
    • Payload URL: http://<jenkins-url>/github-webhook/
    • Content type: application/json
    • 트리거: Push events, Pull request

Jenkins vs GitHub Actions

항목 Jenkins GitHub Actions
호스팅 자체 서버 클라우드 (GitHub)
비용 서버 비용 무료 (월 2000분)
유연성 매우 높음 높음
설정 복잡도 높음 낮음
플러그인 생태계 매우 풍부 Actions Marketplace

메모