我们已经实施了一个Post Commit Hook,它可以在Jenkins上开始我们的工作。我们的灵感是:Trouble with SVN post-commit and Jenkins
它按照预期的方式运作,我们已将每项工作的轮询设置为空白,如Yossi所述。
我现在的问题是:当Jenkins服务器关闭时你会怎么做?无论如何都会接受提交,但是当Jenkins服务器关闭时,工作没有开始......如何确保在服务器再次启动时启动作业?
答案 0 :(得分:0)
如果您担心错过提交,则需要将通知缓冲到Jenkins。一种可能的情况如下:
当Jenkins不可用时,将信息写入文件(数据库)。您需要第二个进程定期读取文件(DB),并在Jenkins可用时将信息推送到Jenkins。
完全不同的选择是忽略Jenkins不可用时的情况。当频繁更改源时,无论如何都会很快触发下一个构建。对于只有不经常更改的作业,您可以使用Startup Trigger Plugin。您还可以在启动时触发从上一个示例中读取文件(db)的作业。
一般情况下,只需浏览一下Jenkins Plugin list,让你的想象力充满了插件可以为你做的事情。您可能会提出非常有创意的解决方案。
答案 1 :(得分:0)
Jenkins会将您的源存储库调查为每分钟一次,以查看是否需要构建某些内容。
当我们使用CVS时,我使用了一个post-commit钩子来强制Subversion构建,因为轮询CVS存储库以查看是否发生了更改是一个长且处理器密集型的活动。如果您使用CVS在Jenkins中执行十几个或更多项目,您将减慢Jenkins和您的CVS repo的爬行速度。使用提交后触发器是唯一的方法。然而,我们遇到的一个问题是,如果Jenkins失败了,它就不会做缺失的构建。
当我们转向Subversion时,我只是设置Jenkins每分钟轮询我们的Subversion存储库。查找Subversion中是否发生了更改非常快并且占用的资源很少。如果Jenkins服务器关闭,Jenkins将立即轮询各种Subversion项目,并将从几乎停止的地方开始构建。
此行为有一些缺点以及某些网站不允许Jenkins轮询存储库的原因:
对我来说,这些都是小问题,我喜欢詹金斯在没有我担心的情况下照顾自己的事实。但是,如果你需要在Jenkins中使用Subversion触发器构建,你可以使用发布构建命令的post-commit钩子来完成它,但正如你所知,如果Jenkins关闭,它不知道它必须进行构建
解决这个问题的一种方法是让Jenkins进行轮询并使用post-commit钩子来触发Jenkins构建。有file system SCM plugin将轮询文件或目录,并触发构建。詹金斯也有command line interface。您可以在提交后挂钩中组合这些。
使用命令行界面查看Jenkins是否已启动并正在运行。如果是,您可以像往常一样通过URL触发构建。如果Jenkins未启动并运行,请更新轮询文件。
Jenkins可以每5分钟左右轮询一次这个文件(不需要按分钟触发),如果发现这个文件已被更改,它将自动执行新的构建。这样,如果Jenkins关闭,您可以使用轮询机制作为备份。
答案 2 :(得分:0)
我们对此问题的解决方案:
不是让post-commit挂钩直接调用jenkins服务器,而是调用我们的中央Quality应用程序(控制我们所有的Jenkins服务器,作业等)。然后,此应用程序在相应的Jenkins服务器上推送构建。如果Jenkins服务器关闭 - 应用程序稍后再次尝试。