Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 使用post-commit钩子时的Jenkins行为_Svn_Jenkins - Fatal编程技术网

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

Svn 使用post-commit钩子时的Jenkins行为,svn,jenkins,Svn,Jenkins,我使用post-commit钩子,在用户签入Subversion代码时,自动触发在Jenkins中配置的作业的构建 当使用post commit hook时,当发出notifyCommit请求时,Jenkins会解析出在所有活动作业中配置的svn repo url吗??或者,只有启用“轮询scm”功能时,才会解析作业的svn repo url 我需要知道这一点,因为最近SVN非常慢,或者在达到其最大客户端限制(64)后下降。我的Maxrequestsperchild是64000。我在Jenkin

我使用post-commit钩子,在用户签入Subversion代码时,自动触发在Jenkins中配置的作业的构建

当使用post commit hook时,当发出notifyCommit请求时,Jenkins会解析出在所有活动作业中配置的svn repo url吗??或者,只有启用“轮询scm”功能时,才会解析作业的svn repo url

我需要知道这一点,因为最近SVN非常慢,或者在达到其最大客户端限制(64)后下降。我的Maxrequestsperchild是64000。我在Jenkins有大约200份工作,其中大约50份打开了“轮询scm”功能

感谢您的帮助。
谢谢

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

编辑:
以下是文档中关于使用提交后挂钩的文本

Jenkins上的作业需要配置SCM轮询选项才能从该行为中获益。这样,通过省略SCM轮询选项,您就可以拥有一些从不由post commit hook(在$REPOSITORY/hooks目录中)触发的作业,例如与发布相关的任务。 配置的轮询可以有任何计划(可能不像每月或每年这样频繁)。最终的效果就好像轮询发生在他们通常的周期之外。

它的意思是,如果您希望一个作业由post-commmit钩子触发,那么您必须使用SCM轮询配置该作业(尽管它可能是不频繁的轮询)。生成的次数与调用post-commit钩子的次数相同,与SCM轮询间隔无关


这样做是为了让您可以使用post-commit钩子配置一个存储库位置,以及一个作用于钩子的自动构建作业,当为同一存储库位置配置另一个手动作业时,配置时没有配置SCM轮询,这将忽略提交后钩子。

当您通过Subversion提交后钩子触发Jenkins时,您只是向Jenkins作业发送一个URL以启动构建

如果查看Jenkins作业配置页面并转到生成触发器部分,您将看到远程触发生成的条目(例如,来自脚本)。然后给出构建令牌的名称,然后可以通过
wget
curl
命令使用该URL来触发构建

生成标记只是一个字符串,您可以使用它强制生成。例如,如果您的Jenkins URL为
http://jenkins.vegicorp.com
,您的作业名为
foo trunk
,并且您已将生成令牌设置为
build\u ME\u NOW
,您可以通过以下方式触发生成:

 wget http://jenkins.vegicorp.com/job/foo-trunk/build?token=BUILD_ME_NOW
你能做的是使用一套命名Jenkins jobs的方法,这样你就可以解析你的Subversion URL来找出该job的URL

例如,您使用URL
/trunk/project
/branchs/branch\u name/project
设置Subversion repo,并将Jenkins作业设置为
project trunk
project-branch\u name

您可以在预提交钩子中查看
svnlook changed
命令的输出。您需要切掉文件名和目录名,因此您只需要项目名,以及项目是在主干上还是在分支上

然后,您将使用该信息来创建一个构建触发器URL。例如,我发现所有文件都位于以下位置:

 /trunk/foo
我知道这是我在trunk下的
foo
项目,詹金斯的工作应该称为
foo trunk
。从那里,我可以看出URL应该是
$JENKINS\u URL/job/foo trunk?token=BUILD\u ME\u NOW

幸运的是,有一个
foo-trunk
项目(准备好处理post-commit触发器中
wget
的错误)正在运行:

 wget $JENKINS_URL/job/foo-trunk?token-BUILD_ME_NOW
将触发构建

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

但是,我不认为这是Subversion的问题。Subversion轮询速度快,占用资源少。而且,我不介意在提交后不立即构建,偶尔两个人在同一个构建中提交更改的双重提交对我来说不是什么大问题。另外,如果Jenkins发生故障,那么如果我依赖于post-commit钩子,构建将不会被触发。如果我使用标准轮询SCM触发器,Jenkins将在构建返回后触发它

通过post-commit触发器触发的一个地方是您使用构建参数的地方。例如,我在Jenkins项目中定义了
foo
Jenkins,而不是为每个分支单独构建
foo
,我的一个参数是我要构建的分支(或主干)。现在,我的post-commit触发器可以触发正确分支的构建

我认为这个例子有一个提交后的颠覆触发器。有一个是给你一个如何工作的想法



在Jenkins的Subversion插件页面上找到了这个。

您能详细说明一下吗?你的意思是只有启用了“轮询scm”,Jenkins才会解析出作业的SVN URL吗?或者Jenkins会解析每个作业的SVN URL吗?即使“poll scm”未启用?当您的post-commit钩子向
http://jenkinsurl/subversion/repo_uuid/notifyCommit
,詹金斯将找出哪些工作使用该特定回购协议。然后,它将检查这些作业上是否启用了SCM轮询。如果是,它将被触发。如果没有,它将被忽略。所以,是的,提交到workLet后需要SCM轮询,我可以用另一种方式提问。我有提交后钩子设置。在Jenkins中,我有两个作业—打开轮询scm并指向SVN主干中的location/projA/的作业。作业B未打开轮询scm,且为p