我在Windows Server 2008上设置了一个hudson构建服务器。我们希望能够提交到存储库,并且在提交成功之后我们希望可视svn服务器向hudson构建服务器发送消息或触发器让它知道它需要执行构建。我们希望它只在有人提交时才构建,所以我们不想继续轮询svn,因为它没有必要。
是否有一个可视svn插件可以自动向hudson发送消息,还是有更好的方法可以在不使用wget的情况下执行此操作?我已经尝试在visual svn服务器的post commit钩子中使用wget on hudson build url但是我意识到post commit钩子只能为整个存储库而不是可视svn服务器中的单个项目设置,所以如果我们做了一个对存储库中的另一个项目进行小的更改,即使在与hudosn链接的项目中没有发生任何更改,它也会告诉hudson需要构建...
答案 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作业中创建了身份验证令牌。