우리는 몇 년 동안 Jenkins를 cron 드롭으로 사용 해 왔으며 다음과 같은 장단점이 있습니다.
찬성
수십 개의 서버와 여러 환경에서 많은 수의 프로세스를 관리하는 경우 많은 작업이 쉬워집니다. 기본적으로 전자 메일 알림, 모든 것을위한 공통 대시 보드, 로그를위한 웹 인터페이스 및 추가 노드를 설정하여 작업을 실행할 수있는 쉬운 방법이 제공됩니다. 지원 팀은 특히 문제를 확인하고 작업을 다시 실행하기 위해이 중앙 위치에 있다는 점을 높이 평가합니다.
Jenkins 플러그인 생태계는 매우 활발하고 추가 기능을 많이 제공합니다 ... Jenkins 자체가 원하는 것을 제공하지 않는 경우이 경우 실제로 Jenkins의 '킬러'기능이라고 생각합니다. 종종 플러그인이 없습니다. 내가 좋아하는 것 중 일부는 Cron Column, Rebuild, NodeLabel Parameter, Log Parser 및 Email-ext입니다.
고급 스케줄링 / 트리거 지원 : 스케줄 구문은 기본적으로 cron이므로 유연성이 동일하지만 트리거, REST API 및 Groovy / Java API가 보완됩니다.
단점
중앙 장애 지점 : 모든 작업이 하나의 서버에서 시작되므로 해당 상자가 작동 중지되고 아무도 알지 못하는 경우 큰 문제입니다. 따라서 소스 제어에 저장된 모든 구성뿐만 아니라 중단을 즉시 포착 할 수있는 좋은 모니터링 기능이 있습니다. 원래 서버를 백업 할 수 없더라도 작업 구성이있는 한 다른 서버를 설정하는 것은 쉽지 않습니다. 해결 시간이 문제가 될 경우 대기 사전 설정을하는 것이 좋습니다.
여러 환경 (Dev, UAT, Prod)이있는 경우 일반적으로 각 환경에서 실행되는 작업 버전이 약간 다릅니다. 이러한 모든 작업을 하나의 Jenkins에 두는 것은 어려워 질 수 있으며 수동으로 구성하는 것은 큰 고통이됩니다. 이 경우 각 환경에 대해 별도의 Jenkins 'Cron'인스턴스를 실행합니다. 인스턴스는 사내 배포 도구를 사용하여 자동으로 설치 및 구성됩니다. 그런 것이 없을 수도 있지만 비슷한 일을하는 오픈 소스 도구가 있습니다 (템플릿을 사용하여 구성 생성). 구성 생성 문제를 해결할 수 있으면 Jenkins를 설정하고 배포하는 것이 훨씬 쉬워지고 모든 항목을 소스 제어로 유지하는 것이 더 쉬워집니다.
Jenkins를 업그레이드하면 기능, 특히 플러그인의 기능이 중단되는 경우가 있습니다. 먼저 다른 곳에서 새 버전을 시도 할 때까지 미션 크리티컬 Jenkins 인스턴스를 업그레이드하지 마십시오. 여기에는 자체 Jenkins 인스턴스가있는 미러 개발 환경이 매우 유용합니다.
한 가지 강조해야 할 점 : 우리는 실제로 CI에도 Jenkins를 사용하지만 이것은 별도의 인스턴스입니다. 'cron'인스턴스는 작업 관리 전용이며 'CI'인스턴스는 CI 전용입니다. 우려를 분리하면 일이 더 깨끗해 보입니다.
참고로, 나는 집에있는 Linux 상자에서 cron 대신 Jenkins를 사용합니다 :)
그건 그렇고, 이것은 실제로 꽤 일반적인 Jenkins 유스 케이스입니다. 예를 들어 Sandia National Lab은 다음과 같이 Jenkins를 사용합니다.
https://software.sandia.gov/trac/fast/wiki/Hudson
그리고 이것을 설명하는 수많은 블로그 게시물과 튜토리얼이 있습니다. 다음은 몇 가지 예입니다.
http://blog.vuksan.com/2011/08/22/using-jenkins-as-a-cron-server/
http://morgajel.net/2011/12/12/1108
또한 이것이 실제로 모든 CI 도구가 아니라 Jenkins와 관련이 있다는 점도 덧붙여 야합니다. Jenkins가 적합하기 때문에 다른 사람들 (TeamCity, buildbot 등)이 ...