问题 在svn commit时触发hudson构建


我已经设置了一个版本控制系统(subversion),开发人员将使用它来提交和更新他们的代码(让我们说它的地址是 https://开头的服务器/ SVN /项目 )。只需提一下,只有经过身份验证的用户才能访问项目的svn。

另一方面,我已经安装了Hudson服务器作为项目的持续集成服务器(项目的地址是 server:8080/job/project )我想要以下内容:

  • 当存在svn提交时,Hudson构建为自动触发。
  • 当承诺的代码不构建时,将邮件发送给相应的开发人员(提交代码的人)。 (意思是当用户A提交不构建的代码时,只有用户A才能收到带有通知的电子邮件)

只是提到我已经为Hudson用户设置了基于矩阵的授权,因为我不想对所有人开放。

我看到了一些建议 post-commit 钩子,但直到现在都没有工作。

有人可以建议我在这两个问题上做些什么吗?具体步骤将不胜感激。


10045
2018-01-25 10:39


起源

我认为哈德森需要对您的仓库进行读取访问。 ICBWT。 - sbi
为什么没有 提交后挂钩 工作?验证?您还可以将其设置为定期轮询存储库以进行更改。 - Rup
当将示例代码提交给svn时,返回“'post-commit'挂钩失败且错误输出”。 - canadiangeo
@canadiangeo:你找到了解决问题的方法吗?我希望你做到了。 - ArunRaj


答案:


根据 “构建软件项目#通过Subversion / CVS中的更改构建”,Hudson需要轮询您的SVN仓库以检测更改并触发构建。

但是,这可以在SVN的每次提交时启动,例如 在这个帖子中
官方剧本是在 Subversion插件 页。

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/hudson/subversion/${UUID}/notifyCommit?rev=$REV

但是它被指定:

为了这个工作, 您的Hudson必须允许对系统进行匿名读取访问
如果对您的Hudson的访问控制更具限制性, 您可能需要指定用户名和密码,具体取决于您的身份验证配置方式。


7
2018-01-25 11:44



所以在我的情况下,最后一行中url的“server / hudson / subversion”部分,它会是什么? - canadiangeo
我也试过这个建议(borys.name/blog/build_with_hudson_on_subversion_commit.html)哪个适合我的情况,但也没有用。也许我在弄乱提供的URL中需要替换的内容。 - canadiangeo
@canadiangeo:如果我读了 wiki.hudson-ci.org/display/HUDSON/Subversion+Plugin,你只能更换 server 由您的服务器(在您的情况下: http://server:8080),但你保持 /hudson/subversion/... - VonC


要在SVN中提交时触发构建,您必须(1)将您的hudson作业设置为远程构建,以及(2)创建SVN钩子...

第一部分是相当简单的...使钩子转到/ var / lib / svn //钩子并将post-commit.tmpl重命名为post-commit 在那里你可以做点什么

#!/bin/bash
# Este script comprueba si se han hecho cambios en un directorio concreto,
# y en tal caso lanza una build en Jenkins

REPOS="$1"
REV="$2"
JENKINS_JOB="$3"
JENKINS_USER=admin
JENKINS_PASSWORD=****
JENKINS_HOST=<hostname>

if [ -n $(svnlook dirs-changed $REPOS --revision $REV | fgrep "tags\/") ];then
 wget --quiet --auth-no-challenge --no-check-certificate --http-user=$JENKINS_USER --http-password=$JENKINS_PASSWORD http://$JENKINS_HOST/job/$JENKINS_JOB/build?token=TOKEN
fi

exit 0

看看这篇文章 http://blogsyntagma.blogspot.com.ar/2012/04/hook-de-subversion-para-ejecutar-un-job.html (这是西班牙语)


4
2018-04-10 13:35





以下是必需的步骤:

  • 创建一个SVN用户,Hudson可以使用该用户获得对存储库的只读访问权限
  • 配置Hudson在访问存储库时使用此SVN用户
  • 创建一个新作业以在指定地址(即特定分支)使用存储库
  • 将您的作业配置为每分钟至少轮询一次存储库以进行任何更改
  • 配置您的作业以构建所需的内容
  • 配置您的作业以发送有关构建失败的电子邮件

我建议通过电子邮件发送所有开发人员,以便他们收到通知说构建不稳定,而不仅仅是罪魁祸首。这不仅提供了更多的可见性,而且还会激发罪魁祸首立即解决问题或以其他方式接受来自其他开发人员的责骂。相信我,这是有效的。


1
2018-01-25 17:34



感谢您的回答。也许你是对的,如果每个开发人员都在不稳定的构建中得到通知,它会更有效。但是,我认为你在第3步中提出的建议很简单。 :)我希望在svn中提交某些内容时触发构建,而不是每分钟轮询一次存储库。我想在这种情况下需要很多时间,并且可能出现可能的冲突(当2个开发人员同时提交他们的代码时)。或者我错了? - canadiangeo
我仍然建议配置Hudson来轮询存储库。这样,您就可以在一个位置控制和配置构建。如果您愿意,可以将后提交挂钩添加到SVN,但是我没有遇到使用上面概述的步骤的任何问题。 - Bernard