[CI-CD] 젠킨스(Jenkins) 개념 잡기
CI/CD를 처음 접할 때, 보통 Github Actions 와 Jenkins 라는 이름을 자연스럽게 접하게 된다!깃허브 액션이 좀 더 쉽고 간편하고, 젠킨스가 좀 더 복잡하기는 하다하지만 그만큼 더 강력하다 이 글에서
claremont.tistory.com
저번 글에서 Jenkins의 개념과 설치 방법, 그리고 기본적인 동작 방식에 대해 다뤄봤다.
특히 Jenkins가 왜 필요한지, 어떻게 소스 변경을 감지하고 빌드-테스트-배포까지 자동화하는지 전체적인 플로우를 소개했다.
이번 글에서는 그 흐름의 핵심이라 할 수 있는 Jenkinsfile 작성 방법에 대해 정리해보려 한다!
Jenkinsfile이란?
Jenkins에서 수행할 빌드, 테스트, 배포 과정을 코드로 정의한 파일
쉽게 말하면, Jenkins가 따라야 할 레시피(Recipe)를 .groovy 문법 형식으로 적어둔 스크립트라고 보면 된다.
Jenkinsfile을 통해
- 빌드 과정을 버전 관리할 수 있고
- 누구나 동일한 자동화 프로세스를 재현 가능하게 만들 수 있다
[기본 구조]
pipeline {
agent any
stages {
stage('단계 이름') {
steps {
// 실행할 명령어
sh 'echo Hello Jenkins!'
}
}
}
}
- pipeline: 선언형 파이프라인의 시작
- agent any: Jenkins가 작업을 어디서 실행할지 지정 (여기선 아무 노드나 사용)
- stages: 여러 단계(stage)를 정의 - 이것들이 모여져 파이프라인이 완성된다
- steps: 실제로 실행되는 셸 명령어 or 스크립트
(Jenkinsfile 적용 프로젝트 예시) stock-market
pipeline {
agent any
environment {
GIT_URL = 'https://github.com/imclaremont/stock-market.git'
GIT_BRANCH = 'main' // 또는 master
GIT_ID = 'skala-github-id' // GitHub PAT credential ID
IMAGE_REGISTRY = 'amdp-registry.skala-ai.com/skala25a'
IMAGE_NAME = 'sk029-stock-market'
IMAGE_TAG = '1.0'
DOCKER_CREDENTIAL_ID = 'skala-image-registry-id' // Harbor 인증 정보 ID
}
stages {
stage('Clone Repository') {
steps {
git branch: "${GIT_BRANCH}",
url: "${GIT_URL}",
credentialsId: "${GIT_ID}" // GitHub PAT credential ID
}
}
stage('Build with Maven') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Docker Build & Push') {
steps {
script {
docker.withRegistry("https://${IMAGE_REGISTRY}", "${DOCKER_CREDENTIAL_ID}") {
def appImage = docker.build("${IMAGE_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}", "--platform=linux/amd64 .")
appImage.push()
}
}
}
}
stage('Deploy to Kubernetes') {
steps {
sh '''
# 1. Ingress 먼저 삭제 (존재하지 않아도 무시)
kubectl delete -f k8s/ingress.yaml --ignore-not-found
# 2. 기본 리소스 배포
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/hpa.yaml
# 3. Ingress 마지막에 배포
kubectl apply -f k8s/ingress.yaml
# 4. 배포 상태 확인
kubectl rollout status deployment/sk029-stock-market-deployment
'''
}
}
}
}
https://github.com/imclaremont/stock-market
GitHub - imclaremont/stock-market: SpringBoot + Docker + K8s + Jenkins
SpringBoot + Docker + K8s + Jenkins. Contribute to imclaremont/stock-market development by creating an account on GitHub.
github.com
- deployment.yaml : 애플리케이션(Pod)의 배포 전략과 스펙을 정의하는 파일(어떤 Docker 이미지를 사용할지, 몇 개의 Pod를 띄울지 - replicas, 어떤 포트를 열지 등)
- ingress.yaml : IP/도메인 기반 라우팅 설정 (ex: example.com → 특정 Service, 쉽게 말해서 외부용이다)
- service.yaml : Pod들을 외부나 클러스터 내부에서 접근할 수 있게 하는 접근 포인트(LoadBalancer 역할, 쉽게 말해서 내부용이다)
- configmap.yaml : 환경 변수, 설정 파일 등 애플리케이션의 설정을 관리
- hpa.yaml : 애플리케이션 부하에 따라 Pod 수를 자동 조절(Health Check: CPU 사용률 / 메모리 등 기준으로 자동 스케일링)
+ 이 젠킨스파일 설정을 적용하는 2가지 방식
'DevOps > CI-CD' 카테고리의 다른 글
[CI-CD] ArgoCD를 쓰는 이유 (0) | 2025.05.02 |
---|---|
[CI-CD] 젠킨스(Jenkins) 개념 잡기 (0) | 2025.04.29 |