几年来,我们一直在使用Jenkins作为Cron的替代品,这里有一些优点和缺点:
优点
如果您要在数十个服务器和多个环境中管理大量进程,则使许多事情变得容易。您可以立即获得电子邮件警报,适用于所有情况的通用仪表板,用于日志的Web界面以及设置其他节点以运行作业的简便方法。支持团队尤其喜欢在中心位置检查问题并重新运行作业。
Jenkins插件生态系统非常活跃,并提供了许多附加功能...我认为这确实是Jenkins的“杀手”功能,因为如果Jenkins本身没有提供您想要的东西(通常是这种情况),那么更多通常没有插件可以。我最喜欢的一些:Cron列,Rebuild,NodeLabel参数,Log Parser和Email-ext。
先进的调度/触发支持:调度语法基本上是cron,因此您具有相同的灵活性,但是触发器,REST API和Groovy / Java API对此进行了补充
缺点
失败的中心点:因为所有工作都是由一台服务器启动的,所以如果该机箱掉下来却没人注意到,那就是“大麻烦”。因此,最好具有良好的监视功能,以立即捕获中断,并将所有配置保存在源代码管理中。即使您无法备份原始服务器,只要您有工作配置,也可以在其他位置进行设置。如果需要时间解决,那么在某处预配置备用数据库也是一个好主意。
如果您有多个环境(Dev,UAT,Prod),则通常在每个环境上运行的作业版本都会略有不同。将所有这些工作放在一个Jenkins上可能变得很繁琐,而手动配置它们将是一个巨大的痛苦。在我们的案例中,我们为每个环境运行一个单独的Jenkins'Cron'实例。使用内部部署工具自动安装和配置实例。您可能没有类似的东西,但是有开源工具可以做类似的事情(使用模板生成配置)。如果您可以解决配置生成问题,那么这将使设置和部署Jenkins更加容易,并且还可以使所有内容都保留在源代码控制中。
升级Jenkins有时会破坏功能,尤其是使用插件时。在先尝试其他地方的新版本之前,请勿升级关键任务Jenkins实例。在这里,拥有自己的Jenkins实例的镜像Dev环境非常方便。
需要强调的一件事:我们确实也将Jenkins用于CI,但这是一个单独的实例……“ cron”实例专用于作业管理,而“ CI”实例专用于CI。分离关注点似乎可以使事情变得更清洁。
附带说明一下,我在家中的Linux机器上使用Jenkins而不是cron :)
顺便说一下,这实际上是一个非常常见的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
我还应该补充一点,这实际上仅与Jenkins有关,而并非所有CI工具都适用。仅仅因为詹金斯非常适合这样做,并不意味着其他人(TeamCity,buildbot等)都可以...