1장 젠킨스란 무엇인가?
Jenkins는 확장 가능한 지속적 통합 엔진입니다.
주로 다음과 같은 용도로 사용됩니다:
- 소프트웨어 프로젝트를 지속적으로 자동으로 구축/테스트하세요.
- 정기적으로 수행되는 몇 가지 업무를 모니터링합니다.
젠킨스가 가진 특징은 다음과 같습니다:
- 설치가 쉽습니다 - jenkins.war를 데이터베이스 지원 없이 서블렛 컨테이너에 배포하면 됩니다.
- l 구성이 쉽고, 모든 구성은 해당 웹 인터페이스를 통해 이루어집니다.
- l 통합 RSS/이메일은 빌드 결과를 RSS를 통해 게시하거나 빌드가 완료되면 이메일로 알림을 보냅니다.
- 저는 JUnit/TestNG 테스트 보고서를 생성합니다.
- 분산 빌드 지원은 Jenkins가 여러 대의 머신을 함께 빌드하고 테스트할 수 있게 해줍니다.
- l 파일 인식: Jenkins는 어떤 jar가 어떤 빌드에서 생성되었는지, 어떤 jar 버전이 어떤 빌드에서 사용되는지 추적할 수 있습니다.
- l 플러그인 지원: 확장 기능을 지원하여 팀의 용도에 맞는 도구를 개발할 수 있습니다.
1 젠킨스의 기원
지속적 통합(CI)은 많은 소프트웨어 개발 팀이 소프트웨어 개발 생애주기 전반에 걸쳐 코드 품질을 보장하는 데 집중하는 일반적인 관행이 되었습니다. 이는 소프트웨어 구축 과정을 쉽게 하고 안정화하기 위해 고안된 방법입니다. 그리고 개발팀이 다음과 같은 도전 과제를 해결하는 데 도움을 줄 수 있습니다:
- l 소프트웨어 빌드 자동화: 구성이 완료된 후, CI 시스템은 미리 정해진 일정이나 특정 이벤트에 따라 대상 소프트웨어를 빌드합니다.
- l 지속 가능한 자동 검사 구축: CI 시스템은 지속적으로 새로운 또는 수정된 체크인 소스 코드를 얻을 수 있습니다. 즉, 소프트웨어 개발팀이 주기적으로 새 코드를 점검해야 할 때, CI 시스템은 새 코드가 원래 소프트웨어의 성공적인 빌드를 방해했는지 지속적으로 확인합니다. 이로 인해 개발자들이 상호 의존적인 코드 변경 사항을 확인하는 데 드는 시간과 노력이 줄어듭니다(간단히 말하면, 하하).
- l 지속 가능한 자동화 테스트 구축: 점검의 확장 부분을 구축하고, 구축 후 미리 정의된 테스트 규칙을 실행하며, 완료 후 관련 당사자에게 이메일, RSS 등 알림을 발송합니다.
- l 세대 이후 프로세스의 자동화: 자동화된 점검 및 테스트가 성공적으로 완료되면, 소프트웨어 빌드 사이클에서 문서 생성, 소프트웨어 패키징, 런타임이나 소프트웨어 저장소에 구성 요소 배포와 같은 추가 작업이 필요할 수 있습니다. 이로 인해 구성 요소가 사용자에게 더 빠르게 제공될 수 있습니다.
- CI 시스템을 배포하기 위해 필요한 최소 요구사항은 사용 가능한 소스 코드 저장소와 빌드 스크립트가 포함된 프로젝트입니다.
다음 도표는 CI 시스템의 기본 구조를 요약합니다:
시스템의 구성 요소들은 다음과 같은 순서로 작동합니다:
1. 개발자가 코드를 소스 코드 저장소에 체크인합니다.
2. CI 시스템은 각 프로젝트별로 별도의 작업 공간을 생성합니다. 새 빌드가 프리셋되거나 요청되면, 소스 코드 저장소에서 해당 작업 공간에 소스 코드를 저장합니다.
3. CI 시스템은 해당 작업 공간에서 빌드 프로세스를 실행합니다.
4. (구성이 존재하는 경우) 빌드가 완료되면, CI 시스템은 새로운 산출물에서 정의된 테스트 세트를 수행합니다. 완료 시 관련 당사자에게 이메일, RSS 등 알림을 발령하세요.
5. (구성 포함) 빌드가 성공하면 이 산출물이 패키징되어 배포 대상(예: 애플리케이션 서버)으로 전송되거나 소프트웨어 저장소에 새 버전으로 저장됩니다. 소프트웨어 저장소는 CI 시스템의 일부일 수도 있고, 파일 서버나 Java.net, SourceForge 등과 같은 웹사이트와 같은 외부 저장소일 수도 있습니다.
6. CI 시스템은 보통 요청에 따라 즉각 빌드, 보고서 생성, 빌드된 아티팩트 검색 등 대응 동작을 시작합니다.
젠킨스가 그런 CI 시스템 중 하나입니다. 이전에는 허드슨으로 알려졌다.
다음은 젠킨스를 사용해야 하는 몇 가지 이유입니다:
- l 모든 CI 제품 중에서 설치 및 구성이 가장 쉽습니다.
- l 웹 접속을 기반으로 한 사용자 인터페이스는 매우 친근하고 직관적이며 유연하며, 많은 경우 AJAX로부터 즉각적인 피드백을 제공합니다.
- l Jenkins는 Java 기반으로 개발되었는데(Java 개발자에게 매우 유용하지만), Java 기반 소프트웨어 구축에만 국한되지 않습니다.
- 젠킨스는 많은 플러그인을 보유하고 있습니다. 이 플러그인들은 Jenkins의 기능을 크게 확장합니다; 모두 오픈 소스이며, 웹 인터페이스를 통해 직접 설치하고 관리할 수 있습니다.
1.1 젠킨스의 목표 젠킨스의 주요 목표는 소프트웨어 개발 과정을 모니터링하고 문제를 신속히 발견하는 것입니다. 따라서 개발자와 관련 인력이 시간과 노력을 절약하고 개발 효율성을 높일 수 있습니다.
CI 시스템의 주요 역할은 제어 기능입니다: 시스템이 코드 저장소에서 변경을 감지하면 빌드 실행 작업을 빌드 프로세스 자체에 위임합니다. 빌드가 실패하면 CI 시스템이 관련 사용자에게 알리고 저장소를 계속 모니터링합니다. 등장인물들은 수동적인 편이다; 하지만 문제를 빠르게 반영합니다.
특히, 다음과 같은 장점이 있습니다:
- l Jenkins 모든 설정은 웹 인터페이스에서 할 수 있습니다. MAVEN_HOME이나 이메일 같은 일부 구성은 한 번만 설정하면 모든 프로젝트를 사용할 수 있습니다. 물론 XML을 수정하여 구성할 수도 있습니다.
- Maven을 지원하는 모듈에 대해 Jenkins는 Maven을 최적화하여 모듈을 자동으로 인식하고 각 모듈을 작업으로 구성할 수 있습니다. 꽤 유연하네요.
- l 테스트 보고서 집계, 모든 모듈의 테스트 보고서를 함께 집계하여 결과를 한눈에 명확하게 확인할 수 있는데, 이는 거의 불가능한 작업입니다.
- l. 아티팩트 지문 결과는 각 빌드 결과가 자동으로 잘 관리되며, 설정 없이도 쉽게 탐색하고 다운로드할 수 있습니다.
|