使用post-commit钩子时的Jenkins行为

时间:2014-04-01 16:28:44

标签: svn jenkins

当用户将代码检入Subversion时,我使用post-commit hook自动触发在Jenkins中配置的作业的构建。

当使用post-commit hook时,Jenkins会在发出notifyCommit请求时解析出在所有活动作业中配置的svn repo url吗?或者只有在调查scm'之后它才会解析svn repo url的工作。功能已开启?

我需要知道这一点,因为后期SVN非常慢或在达到其最大客户端限制(64)后下降。我的Maxrequestsperchild是64000.我在詹金斯大约有200个工作岗位,其中大约50个工作人员都在调查scm'功能已打开。

感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:1)

我很确定它需要启用SCM轮询,但您可以设置一些罕见的时间表,例如每年一次。

修改
以下是Subversion Plugin文档中有关使用提交后挂钩的文本

Jobs on Jenkins need to be configured with the SCM polling option to benefit from this behavior. This is so that you can have some jobs that are never triggered by the post-commit hook (in the $REPOSITORY/hooks directory), such as release related tasks, by omitting the SCM polling option. The configured polling can have any schedule (probably infrequent like monthly or yearly). The net effect is as if polling happens out of their usual cycles.

它的含义是,如果您希望通过post-commmit hook触发作业,则必须使用SCM轮询配置该作业(尽管它可能是不频繁的轮询)。构建将在调用post-commit钩子时发生多次,与SCM轮询间隔无关。

这样做是为了使您可以使用提交后挂钩配置存储库位置,以及作用于挂钩的自动构建作业,同时使用另一个手动对于相同的存储库位置的作业,但是在没有SCM轮询的情况下配置将忽略后提交挂钩。

答案 1 :(得分:1)

当您通过Subversion post-commit挂钩触发Jenkins时,您只需向Jenkins作业发送一个URL即可开始构建。

如果您查看Jenkins作业配置页面并转到构建触发器部分,您将看到远程触发器构建的条目(例如,从脚本中)< / em>的。然后,您提供构建令牌的名称,然后您可以通过wgetcurl命令使用该URL来触发构建。

构建令牌只是一个可用于强制构建的字符串。例如,如果您的Jenkins网址为http://jenkins.vegicorp.com,并且您的工作名称为foo-trunk,并且您已将构建令牌设置为BUILD_ME_NOW,则可以使用以下命令触发构建:< / p>

 wget http://jenkins.vegicorp.com/job/foo-trunk/build?token=BUILD_ME_NOW

您可以使用如何命名Jenkins作业的方式,这样您就可以解析Subversion URL以找出作业的URL。

例如,您使用网址/trunk/project/branches/branch_name/project设置Subversion存储库,并将Jenkins作业设置为project-trunkproject-branch_name

您可以在预提交挂钩中查看svnlook changed命令的输出。您可以删除文件和目录名称,这样您就可以拥有项目名称,以及项目是在主干还是分支上。

然后,您将使用该信息来构建构建触发器URL。例如,我发现所有文件都在:

 /trunk/foo

我知道这是我在trunk下的foo项目,而Jenkins的工作应该被称为foo-trunk。从那里,我可以发现该网址应为$JENKINS_URL/job/foo-trunk?token=BUILD_ME_NOW

幸运的是,有一个foo-trunk项目(准备好在你的提交后触发器中处理来自wget的错误)并运行:

 wget $JENKINS_URL/job/foo-trunk?token-BUILD_ME_NOW

将触发构建。

人们喜欢这样,因为他们可以在提交后立即触发构建,而不是等待下一分钟。使用CVS,您无法使用轮询,因为轮询CVS构建需要花费大量时间和资源。

但是,我不认为这是Subversion的问题。 Subversion轮询速度快,占用资源少。而且,我不介意这样一个事实:我不会在提交后立即构建,偶尔会在同一个版本中进行双重提交,这对我来说不是一个大问题。另外,如果Jenkins碰巧失败了,如果我依赖于post-commit钩子,那么构建将不会被触发。如果我使用标准的 Poll SCM 触发器,Jenkins会在它重新启动后触发构建。

通过提交后触发器触发的一个地方可能有用,就是使用构建参数的地方。例如,我没有为每个分支建立单独的foo构建,而是在foo Jenkins项目上定义,我的一个参数是我要构建的分支(或者主干) )。现在,我的提交后触发器可以触发正确分支的构建。

我认为Jenkins有一个提交后Subversion触发器的例子。 CVS有一个会让你知道它是如何工作的。


在Jenkins的Subversion插件页面上找到此post-commit hook