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 연동
- Jenkins Job → Build Triggers →
GitHub hook trigger for GITScm polling 체크
- 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 |
메모