셀프 호스팅 CI 서버 구축: Azure DevOps Server vs Jenkins
온프레미스 환경에서의 지속적 통합(Continuous Integration) 전략 가이드
1. 왜 셀프 호스팅 CI 서버를 구축하는가?
클라우드 기반 CI/CD 서비스가 대중화되었음에도 불구하고, 많은 기업은 여전히 셀프 호스팅 CI 서버를 선택하고 있습니다. 그 이유는 다음과 같습니다:
- 보안 요구사항: 소스 코드와 빌드 데이터를 외부 클라우드에 저장하는 것이 불가능한 보안 정책 존재
- 커스터마이징 유연성: 트리거 방식, 플러그인, 빌드 프로세스 등을 자유롭게 조작
- 비용 절감: 대규모 프로젝트의 경우 SaaS 요금이 상당히 높아짐
- 내부망 개발 환경: 외부 인터넷 연결이 차단된 개발 인프라에서만 빌드 가능
2. 대표적인 셀프 호스팅 CI 툴 소개
Jenkins
- 오픈소스 CI 도구의 대표주자
- 플러그인을 통한 확장성 뛰어남
- 다양한 언어, 플랫폼, 툴과 연동 가능
- 커뮤니티 중심의 개발 및 유지보수
Azure DevOps Server (기존 TFS)
- Microsoft에서 제공하는 온프레미스 DevOps 솔루션
- Git 저장소, 빌드 파이프라인, 테스트, 배포 등을 통합 제공
- AD 계정 연동, 권한 체계 통합 가능
- 대기업에서 많이 채택
3. Jenkins 설치 및 구성 방법
3-1. 설치 환경
- OS: Ubuntu 20.04 / CentOS 8 / Windows Server
- 요구 사양: 최소 2vCPU, 4GB RAM, Java 11 이상
3-2. 설치 과정 (Ubuntu 예시)
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins -y
sudo systemctl start jenkins
sudo systemctl enable jenkins
3-3. 초기 설정
- http://localhost:8080 접속
- 관리자 비밀번호 입력 (/var/lib/jenkins/secrets/initialAdminPassword)
- 추천 플러그인 설치
- 관리자 계정 생성 및 기본 Job 구성
4. Azure DevOps Server 설치 및 구성
4-1. 설치 사전 준비
- OS: Windows Server 2019 이상
- SQL Server: SQL Server 2019 이상
- .NET Framework 4.8 이상
- IIS 활성화 (포털 사용 시)
4-2. 설치 순서 요약
- 공식 사이트에서 설치 파일 다운로드
- TFS 설치 후 Azure DevOps Server Configuration Wizard 실행
- 새 Team Project Collection 생성
- Git 저장소 또는 TFVC 구성
- Build Agent 설치 및 연결
5. CI 파이프라인 구성 실전 예시
Jenkins 파이프라인 예제 (Declarative 방식)
pipeline {
agent any
stages {
stage('Clone') {
steps {
git 'https://github.com/myorg/myapp.git'
}
}
stage('Build') {
steps {
sh './gradlew build'
}
}
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
Jenkins에서는 파이프라인을 Groovy 기반 DSL로 작성하여 유연한 Job 구성이 가능합니다.
Azure DevOps Server 파이프라인 예제
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '7.x'
installationPath: $(Agent.ToolsDirectory)/dotnet
- script: dotnet build MyProject.sln
displayName: 'Build Project'
- script: dotnet test MyProject.sln
displayName: 'Run Tests'
YAML 기반의 파이프라인 스크립트로 구성되며, Azure 환경에 최적화된 다양한 Task 지원
6. Jenkins vs Azure DevOps Server 비교
항목 | Jenkins | Azure DevOps Server |
라이선스 | 오픈소스 | Microsoft 상용 라이선스 |
UI/UX | 커스터마이징 자유도 높음 | 기업 친화적 UI |
VCS 지원 | Git, SVN 등 광범위 | Git, TFVC |
플러그인 | 1800개 이상 | 기본 통합 제공 |
설치 복잡도 | 낮음 | 높음 (SQL Server 필요) |
커뮤니티 | 활발한 오픈소스 커뮤니티 | 공식 지원 중심 |
확장성 | 최고 수준 | Microsoft 생태계에 최적화 |
7. 유지보수 및 보안 고려 사항
- 정기 업데이트 적용: Jenkins는 보안 패치가 빠르게 이뤄지므로 플러그인과 함께 주기적으로 업그레이드 필요
- 접근 제어 정책 강화: AD 연동, SSO, API 인증 설정
- 백업 및 복구 전략 수립: Job 설정, 워크스페이스, 사용자 데이터 정기 백업
- 모니터링 도구 연동: Prometheus, Grafana 등으로 빌드 시간, 실패율 분석
8. 실제 구축 아키텍처 다이어그램
개발자 → GitLab/GitHub → CI 서버 (Jenkins or Azure DevOps)
↓
Build/Test → Artifactory (패키지 저장소)
↓
Deploy → 운영 서버
9. 결론
온프레미스 환경에서의 CI/CD 자동화는 보안성과 커스터마이징이 핵심입니다. Jenkins와 Azure DevOps Server는 각각의 강점을 가지고 있으며, 조직의 인프라 조건과 개발 방식에 따라 선택이 달라질 수 있습니다.
- Jenkins는 경량 구축과 유연한 확장성이 장점
- Azure DevOps Server는 Microsoft 생태계에 깊이 통합된 통합 솔루션
CI/CD는 단순한 빌드 자동화가 아닌, 품질 향상과 개발 생산성 향상의 핵심입니다. 셀프 호스팅 환경에서도 충분히 효율적인 DevOps 문화를 구축할 수 있으며, 올바른 도구와 전략을 갖추는 것이 중요합니다.
'IT개발' 카테고리의 다른 글
MLOps 파이프라인 설계와 관리 (0) | 2025.04.26 |
---|---|
데브섹옵스(DevSecOps) 도입 방법론 (0) | 2025.04.26 |
인프라 비용 최적화를 위한 자동화 스크립트 예시 (0) | 2025.04.26 |
컨테이너 스캐닝과 취약점 관리 (0) | 2025.04.26 |
비상 복구(Disaster Recovery) 설계와 실행 절차 (0) | 2025.04.26 |