用于视觉svn的Hudson插件

时间:2010-06-16 18:32:35

标签: svn hudson visualsvn

问题

我在Windows Server 2008上设置了一个hudson构建服务器。我们希望能够提交到存储库,并且在提交成功之后我们希望可视svn服务器向hudson构建服务器发送消息或触发器让它知道它需要执行构建。我们希望它只在有人提交时才构建,所以我们不想继续轮询svn,因为它没有必要。

问题

是否有一个可视svn插件可以自动向hudson发送消息,还是有更好的方法可以在不使用wget的情况下执行此操作?我已经尝试在visual svn服务器的post commit钩子中使用wget on hudson build url但是我意识到post commit钩子只能为整个存储库而不是可视svn服务器中的单个项目设置,所以如果我们做了一个对存储库中的另一个项目进行小的更改,即使在与hudosn链接的项目中没有发生任何更改,它也会告诉hudson需要构建...

3 个答案:

答案 0 :(得分:3)

让哈德森想出那一个怎么样。 Hudson可以轮询存储库(仅限项目的URL)以查明是否存在更改并仅在检测到更改时进行构建。

答案 1 :(得分:0)

我同意@Peter_Schuetze,让哈德森想出来。除非你真的看到问题,否则不值得优化。

您可以使用push Hudson的提交后挂钩,然后“Hudson将针对配置了轮询的所有作业检查[更改],并相应地安排构建。”

  

只能为整个存储库设置post commit hooks,而不能为单个项目设置

真。如果您真的担心,在post-commit钩子中,您可以在ping Hudson之前检查更改的目录,例如:

changes=`svnlook dirs-changed -r $REV $REPO`
case $changes in
   my_project/*)
     # ping Hudson
     ;;
esac

对我来说,让post-commit hook保持最新似乎太过分了。

答案 2 :(得分:0)

如果只想触发某些项目的构建,最有效的方法是将逻辑写入svn提交后钩子。这样可以避免不必要的轮询流量,并且仅在更改所需项目时才触发作业。下面的示例在我们的VisualSVN Server实例中使用。

set repos=%1
set rev=%2

FOR /F "tokens=*" %%k IN ('svnlook dirs-changed "%repos%" -r %rev% 2^>NUL') do (
  set Changed_Project=%%k
)
set Changed_Project=%Changed_Project:~9,9%
if "%Changed_Project%" == "Project_A" goto Actions_For_Project_A

:Actions_For_Project_A
curl -X POST "http://JenkinsVM:8080/job/Job_Name/build?&token=TOKEN_NAME

以上几行假定 project 在/ branches / Project_A下。对于其他位置,您将需要调整字符串的开始和长度值。它还假定curl在您设置的路径中,并且您已经在Jenkins作业中创建了身份验证令牌