DevSecOps/CI&CD

Jenkins란? DevOps 및 DevSecOps에서의 역할

봉의일상 2025. 3. 16. 23:38

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으로 접속하여 초기 설정을 진행할 수 있습니다.

  1. /var/lib/jenkins/secrets/initialAdminPassword에 저장된 초기 비밀번호 입력
  2. 기본 플러그인 설치 또는 원하는 플러그인 선택하여 설치
  3. 관리자 계정 생성 후 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를 활용한 자동화 파이프라인을 구축하는 것이 좋은 선택이 될 수 있습니다.