Jenkins는 CI/CD를 위한 오프 소스 도구로, 소프트웨어 개발 생명주기를 자동화한다.
Jenkins를 사용하면 코드 변경 사항이 발생할 때마다 자동으로 빌드, 테스트, 배포 과정을 수행할 수 있기 때문에 개발자는 코드 변경에 따른 빌드 및 테스트 과정을 수동으로 수행할 필요가 없어지며, 신속하게 개발에 대한 코드 검증 및 배포할 수 있고, 이 과정에서 휴먼 에러를 방지할 수 있다.
Jenkins는 다양한 플러그인을 지원하기 때문에 사용자가 필요에 맞게 플러그인을 통합하여 CI/CD 환경을 확장할 수 있다. 하지만 다양한 플러그인을 사용하여 파이프라인을 구성하면 구성이 복잡해질 수 있고, 이에 따른 버전 호환성, 보안 사항 등을 고려해야 하기 때문에 유지보수에 어려움을 겪을 수 있다. 그렇기 때문에 환경에 필요한 플러그인을 잘 선택하여 사용하는 것이 중요하다.
Master는 controller라고 불리며, Jenkins slave를 관리하고 작업 스케줄링과 slave 모니터링을 포함하여 다양한 작업을 관리한다.
slave는 agent라고 불리며, 실제 파이프라인 작업을 수행한다. 다양한 환경에서 작동하며 작업을 분산시켜 부하를 감소시키는 역할을 담당한다. agent는 로컬 또는 클라우드 컴퓨터를 통해 Jenkins controller에 연결될 수 있어 다양한 유연성을 제공한다.
1. SCM (Source Code Management)Jenkins는 코드가 보관되어 있는 Git 저장소에 코드 변경사항을 감지하여 자동으로 파이프라인을 수행할 수 있다. Git 저장소에는 소스 코드뿐 아니라 Jenkins 스크립트 실행에 필요한 'Jenkinsfile'과 Kubernetes 배포에 필요한 'Helm Chart'와 같은 파일들도 보관될 수 있다.
.2 CI (Continuous Integration) 파이프라인이 실행되면 Agent를 통해 파이프라인 스크립트에 정의된 작업(job)이 실행된다. 이때 소스 코드 빌드, 코드 검증 테스트, 도커 이미지 빌드, 도커 이미지 검증 등 여러 작업이 순차적으로 진행된다.
AWS EKS 클러스터
Helm CLI 도구
AWS EKS : v1.27.7
Helm : v3.8.2
Jenkins Helm Chart 버전 : 4.11.1
Jenkins Helm APP 버전 : 2.426.2
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
Pipeline 예시 (Jenkinsfile)
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/your-repo.git'
}
}
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'mvn deploy'
}
}
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
Manage Jenkins > Global Tool Configuration에서:
유용한 플러그인들:
Manage Jenkins > Configure Global Security: