【发布时间】:2015-10-09 19:37:07
【问题描述】:
我需要的是一个 SVN 提交后挂钩,它必须能够创建(不仅仅是触发运行)它自己的 Jenkins 作业(如果修订 ID 为 0),并且它必须在多个项目上执行。基本上,每个项目都必须能够使用这个钩子在第一次提交时在 Jenkins 中添加自己的工作。我需要知道的是如何为 Jenkins 提供每个项目的存储库 URL,始终使用相同的钩子。
【问题讨论】:
标签: svn jenkins post-commit-hook
我需要的是一个 SVN 提交后挂钩,它必须能够创建(不仅仅是触发运行)它自己的 Jenkins 作业(如果修订 ID 为 0),并且它必须在多个项目上执行。基本上,每个项目都必须能够使用这个钩子在第一次提交时在 Jenkins 中添加自己的工作。我需要知道的是如何为 Jenkins 提供每个项目的存储库 URL,始终使用相同的钩子。
【问题讨论】:
标签: svn jenkins post-commit-hook
当您运行提交后挂钩时,提交者必须等到提交完成——这意味着等待提交后操作本身完成。如果这需要太长,而太长可能是几秒钟,用户会反抗。想象一下,每次您进行提交时,提交都需要额外的 15 秒。你坐在那里十五秒钟不知道发生了什么。用户要等多久才能开始尝试终止提交?
您可以通过 Jenkins REST API 复制 Jenkins 作业并更新作业的 config.xml。这不是微不足道的,但它是可能的。但是,这不是您要使用的机制。
不要让数十个 Jenkins 作业在您的存储库中构建项目的子树,而只需一个 Jenkins 作业来构建已修改的项目子树。
假设您的项目foo 的Subversion URL 是http://svn.vegicorp.com/projects/foo,而您的项目bar 的Subversion URL 是http://svn.vegicorp.com/projects/foo。您可以设置一个 Jenkins 作业来监控 http://svn.vegicorp.com/projects,然后查看 foo 和/或 bar 是否已被修改,然后为该特定子树启动构建。当有人创建项目 http://svn.vegicorp.com/projects/fubar 时,Jenkins 也会监视该项目,因为它已经在查看 http://svn.vegicorp.com/projects。
您可以使用Build Name Setter Plugin 将构建的名称 设置为已构建的子树。这将让您查看哪些构建适用于哪些项目。
这应该比尝试在运行中创建 Jenkins 作业更容易在 Jenkins 中设置。
【讨论】:
http://server/project/branches 或 http://server/branches/project。假设它是http://server/branches/project。您检查 http://server 是否有更改。然后,您可以查看更改了哪个分支和哪个项目并进行构建。使用构建名称设置器插件来指定构建的分支和项目。我认为您的所有项目都以相同的方式构建。