Jenkins'i birkaç yıldır cron düşmesi olarak kullanıyoruz ve işte bazı artılar ve eksiler:
Artıları
Düzinelerce sunucu ve çoklu ortamlar arasında çok sayıda işlemi yönetiyorsanız, birçok şeyi kolaylaştırır. Kutudan e-posta uyarıları, her şey için ortak bir kontrol paneli, günlükler için bir web arayüzü ve işleri yürütmek için ek düğümler ayarlamanın kolay bir yolunu alırsınız. Destek ekipleri, sorunları kontrol etmek ve işleri yeniden yürütmek için bu merkezi konuma sahip olmayı özellikle takdir eder.
Jenkins plug-in ekosistemi çok aktiftir ve çok sayıda ek işlevsellik sunar ... Bence bu gerçekten Jenkins 'katil' özelliğidir, çünkü Jenkins'in kendisi aradığınızı sağlamazsa (çoğu durumda) genellikle olmayan bir eklenti yoktur. Favorilerimden bazıları: Cron Sütunu, Yeniden Oluşturma, NodeLabel Parametresi, Günlük Ayrıştırıcı ve E-posta Eklentisi.
Gelişmiş zamanlama / tetikleme desteği: Zamanlama sözdizimi temel olarak cron'dur, bu nedenle orada aynı esnekliğe sahipsiniz, ancak bu Tetikleyiciler, REST API ve Groovy / Java API ile desteklenir
Eksileri
Merkezi başarısızlık: Çünkü bütün işleriniz tek bir sunucu tarafından başlatılıyor, eğer bu kutu kapanır ve kimse farketmezse Büyük Sorun. Böylece, kesintileri hemen yakalamak ve kaynak kontrolüne kaydedilen tüm konfigürasyonlarınızı yakalamak için iyi izlemeniz daha iyi olur. Orijinal sunucuyu yedekleyemiyor olsanız bile, iş yapılandırmanız olduğu sürece, başka bir yere kurulum yapma önemsizdir. Çözünürlük zamanı bir endişe ise, bir yerde önceden yapılandırılmış bir bekleme moduna sahip olmak da muhtemelen iyi bir fikirdir.
Birden fazla ortamınız varsa (Dev, UAT, Prod), genellikle her ortamda çalışan bir işin biraz farklı sürümleri vardır. Bütün bu işleri tek bir Jenkins üzerinde yapmak istemeyerek olabilir ve manuel olarak yapılandırmak çok büyük bir acıya dönüşür. Bizim durumumuzda, her ortam için ayrı bir Jenkins 'Cron' örneği kullanıyoruz. Örnekler bir şirket içi dağıtım aracı kullanılarak otomatik olarak yüklenir ve yapılandırılır. Bunun gibi bir şeye sahip olmayabilirsin, ama benzer şeyler yapan açık kaynak araçları var (şablonları kullanarak configs). Konfigürasyon oluşturma problemini çözebiliyorsanız, bu Jenkins'i kurmayı ve dağıtmayı çok daha kolay hale getirir ve ayrıca tüm malzemelerinizi kaynak kontrolünde tutmayı kolaylaştırır.
Jenkins'i yükseltme bazen, özellikle eklentilerde işlevselliği bozuyor. Yeni sürümü ilk önce başka bir yerde deneyinceye kadar görev kritik Jenkins örneğinizi yükseltmeyin. Bu, kendi Jenkins örneği olan bir Dev ortamına sahip olmanın gerçekten kullanışlı olduğu yerdir.
Belki vurgulamak için bir şey: Gerçekten de CI için Jenkins kullanıyoruz, ama bu ayrı bir örnek ... 'cron' örnekleri iş yönetimine adanmış ve 'CI' örneği CI'ye adanmıştır. Endişeleri ayırmak işleri daha da temizliyor gibi görünüyor.
Not olarak evde Linux kutumda cron yerine Jenkins kullanıyorum :)
Bu arada, bu aslında oldukça yaygın bir Jenkins kullanım örneği. Örneğin, Sandia National Lab, Jenkins'i bu şekilde kullanır:
https://software.sandia.gov/trac/fast/wiki/Hudson
Ve bunu açıklayan çok sayıda blog yazısı ve öğretici var. İşte birkaç örnek:
http://blog.vuksan.com/2011/08/22/using-jenkins-as-a-cron-server/
http://morgajel.net/2011/12/12/1108
Ayrıca, bunun genel olarak tüm CI araçlarına değil, sadece Jenkins ile ilgili olduğunu da eklemeliyim. Sadece Jenkins bunu yapmaya çok uygun olduğu için başkalarının (TeamCity, buildbot vb.) Olduğu anlamına gelmez.