我的任务是让Hudson在提交后开始新的构建。正如我读过here一样,它是通过使用svn post-commit钩子完成的。问题是我不想使用VBScript,因此它是依赖于平台的。我可以看到这个VBScript中唯一重要的东西是使用 svnlook 命令和 http:// server / subversion / $ {UUID} / notifyCommit?rev = $ REV url 。就我而言,我可以做同样的事情,例如,使用java程序(需要参数作为修订版,存储库位置等)。
请您解开 http:// server / subversion / $ {UUID} / notifyCommit?rev = $ REV 网址的神秘面纱?我需要所有可能的变种。如果sombody可以描述与Hudson交互的整个过程(它是在获得此请求后执行的内部进程链),那将是很棒的。
编辑我真的需要提交后行为,而不是轮询机制。
答案 0 :(得分:4)
最快的跨平台解决方案是在SVN服务器上安装Cygwin(假设SVN框运行的是Windows)并使用提供的shell脚本:
REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
--header "Content-Type:text/plain;charset=UTF-8" \
--post-data "`svnlook changed --revision $REV $REPOS`" \
--output-document "-" \
--timeout=2 \
http://server/subversion/${UUID}/notifyCommit?rev=$REV
我需要
的所有可能变体http://server/subversion/${UUID}/notifyCommit?rev=$REV
为什么呢?那就是你所需要的一切。
你也可以在post-commit hook中使用一些东西来ping:http://YOURHOST/jenkins/job/PROJECTNAME/build
。你不会为每次提交获得新的构建,但是如果你在几秒钟内有两次提交你真的想要每个提交吗?
出于好奇,您是否想要提交帖子,因为您发现您的SVN服务器变得非常慢?如果是这样,SVN框上的操作系统是什么?您可能会遇到操作系统的限制,如果您转移到Linux或Windows的服务器版本,您将获得更好的性能(在同一锡)。
答案 1 :(得分:3)
您不一定需要使用svn钩子。只是让Hudson经常调查回购的变化。此外,您可能希望使用一个安静的时间段来连续考虑多个提交(否则可能触发多个构建)。
从您发布的链接:
Jenkins可以轮询Subversion存储库以进行更改,虽然这个效率相当高,但每次只能发生一次,所以在Jenkins检测到更改之前,您可能还需要等待一整分钟。
我不会考虑等一下这个大问题。在大多数情况下,您甚至可能都没有注意到它。
答案 2 :(得分:1)
我这样做了:我配置hudson来检查每一分钟的变化(模式:* * * * *)。它的效果非常好。唯一可能出现的问题是,如果两个项目在这个时间间隔内被提交并且彼此依赖,那么哈德森首先构建错误的项目。
答案 3 :(得分:1)
重要 - 网上的文章都没有明确提及您必须通过“远程触发器构建”选中创建的作业。这是第一步,此步骤本身为您提供了必须放入subversion HOOK脚本
的URL相应的钩子脚本
REPOS="$1"
REV="$2"
/usr/bin/wget \
--header "Content-Type:text/plain;charset=UTF-8" \
--post-data "`/usr/local/bin/svnlook changed --revision $REV $REPOS`" \
--output-document "-" \
--timeout=2 \
http://build.development.com:8080/job/HdsVp/build?token=SVN_CHANGE