Jenkins는 오픈소스 CI/CD(Continuous Integration & Continuous Deployment) 자동화 서버로, 소프트웨어 개발 과정에서 코드 빌드, 테스트, 배포를 자동화하는 데 사용됩니다. 특히 DevOps 및 DevSecOps 환경에서 필수적인 도구로 자리 잡고 있습니다.
1. Jenkins의 주요 기능
1.1 CI/CD 구축
Jenkins는 소프트웨어 개발 파이프라인을 자동화하는 데 핵심적인 역할을 합니다. 코드 변경이 감지되면 자동으로 빌드, 테스트, 배포를 실행하여 개발 속도를 높이고 품질을 유지할 수 있습니다.
1.2 정적 코드 분석 (SAST)
SonarQube, Semgrep과 같은 정적 코드 분석 도구와 연동하여 보안 취약점을 자동으로 검출할 수 있습니다.
1.3 동적 애플리케이션 보안 테스트 (DAST)
OWASP ZAP을 사용하여 애플리케이션을 배포한 후 동적 보안 테스트를 수행할 수 있습니다.
1.4 컨테이너 보안 및 배포
Docker 및 Kubernetes와 연동하여 컨테이너화된 애플리케이션의 보안 점검(Trivy 등)을 수행하고, 배포 프로세스를 자동화할 수 있습니다.
1.5 서버 및 인프라 자동화
Ansible, Terraform과 같은 인프라 자동화 도구와 통합하여 서버 프로비저닝을 자동화할 수 있습니다.
1.6 로그 모니터링 및 알림
Elasticsearch, Grafana, Prometheus와 같은 모니터링 도구와 연동하여 시스템 로그 및 성능 지표를 분석하고 알림을 설정할 수 있습니다.
2. Jenkins 설치 및 설정
2.1 설치 방법
Jenkins는 다양한 플랫폼에서 실행할 수 있으며, 다음과 같은 방법으로 설치할 수 있습니다.
- Linux(Ubuntu/Debian)
sudo apt update
sudo apt install openjdk-11-jdk
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
sudo systemctl start jenkins
- Docker 컨테이너에서 실행
docker run -p 8080:8080 -p 50000:50000 --name jenkins -d jenkins/jenkins:lts
2.2 초기 설정
설치 후 브라우저에서 http://localhost:8080으로 접속하여 초기 설정을 진행할 수 있습니다.
- /var/lib/jenkins/secrets/initialAdminPassword에 저장된 초기 비밀번호 입력
- 기본 플러그인 설치 또는 원하는 플러그인 선택하여 설치
- 관리자 계정 생성 후 Jenkins 대시보드 접속
3. Jenkins 플러그인 및 확장성
Jenkins는 플러그인을 통해 기능을 확장할 수 있습니다. 주요 플러그인은 다음과 같습니다.
- Git 플러그인: GitHub, GitLab 등과 연동하여 코드 변경 감지
- Pipeline 플러그인: Jenkinsfile을 사용한 코드 기반 CI/CD 파이프라인 구축
- SonarQube 플러그인: 코드 품질 및 보안 분석 자동화
- Docker 플러그인: 컨테이너 빌드 및 배포 자동화
- Slack 플러그인: 빌드 결과 알림을 Slack으로 전송
4. Jenkins를 활용한 DevSecOps 자동화 실습
4.1 CI/CD 파이프라인 구축
Jenkinsfile을 사용하여 코드 변경 시 자동 빌드 및 배포를 설정할 수 있습니다.
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/example/repo.git'
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
4.2 보안 자동화 (SAST + DAST + 컨테이너 보안)
pipeline {
agent any
stages {
stage('SAST Analysis') {
steps {
sh 'semgrep --config=auto'
}
}
stage('DAST Analysis') {
steps {
sh 'zap-baseline.py -t http://example.com'
}
}
stage('Container Security Scan') {
steps {
sh 'trivy image example/app:latest'
}
}
}
}
5. Jenkins vs GitHub Actions 비교
기능 | Jenkins | GitHub Actions |
설치 방식 | 직접 서버 설치 필요 | GitHub 제공, 설치 불필요 |
확장성 | 플러그인으로 확장 가능 | GitHub 네이티브 기능 활용 |
비용 | 무료 (자체 호스팅) | 퍼블릭 무료, 프라이빗 제한 |
CI/CD 속도 | 자체 서버 리소스 사용 | GitHub 서버에서 실행 |
DevSecOps 활용 | 모든 보안 도구 연동 가능 | 일부 도구 제한 |
6. 결론
Jenkins는 강력한 CI/CD 및 DevSecOps 자동화 도구로, 지속적인 배포와 보안 강화를 동시에 수행할 수 있습니다. GitHub Actions에 비해 확장성과 유연성이 뛰어나며, 기업 환경에서도 비용 부담 없이 활용할 수 있습니다. 따라서 CI/CD와 DevSecOps를 함께 고려하는 경우, Jenkins를 활용한 자동화 파이프라인을 구축하는 것이 좋은 선택이 될 수 있습니다.
'DevSecOps > CI,CD' 카테고리의 다른 글
내부망에서 제한된 리소스로 GitLab 설치하기 (Docker 기반, /data/아래 경로 수정, HTTPS 적용) (0) | 2025.02.24 |
---|---|
Jenkins 관리자 비밀번호 재설정 (0) | 2025.02.11 |
클라우드 CI/CD 비교 및 멀티 클라우드 DevOps 전략 분석 (0) | 2025.02.10 |
Git Repository에 파일 올리기: GitHub 연동과 푸시하기 (0) | 2025.02.09 |
GitHub에 불필요한 파일 올리지 않기: .gitignore 사용법 (0) | 2025.02.09 |