Jenkins CI使用错误的svn修订版进行构建

时间:2011-05-03 14:52:01

标签: svn continuous-integration hook jenkins

目前我正在使用Jenkins CI Server,我希望通过svn post commit hook触发作业/构建。到目前为止,它按预期工作,但构建使用以前的svn版本。

例如:我签入我的文件,客户端显示版本90,构建开始,但它使用89。

post-commit钩子看起来像这样:

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://ci-jenkins/job/Job1/build?rev=$REV 1>&2

Jenkins中的签出策略配置为“始终签出新副本”。怎么了?我仍然从那开始,并有很多东西需要学习。所以请记住这一点来回答我。 : - )

5 个答案:

答案 0 :(得分:27)

进入同一问题并找到this

基本上你需要在SVN网址的末尾添加@HEAD,例如:

http://svn.yourserver.com/svn/project/trunk@HEAD

答案 1 :(得分:13)

确保Jenkins服务器上的日期/时间与SVN服务器上的日期/时间匹配(或至少在其后面)。

非常确定Jenkins在进行结帐和更新时会使用日期/时间。

答案 2 :(得分:3)

  

嗨,目前我正在使用Jenkins CI Server,我希望通过svn post commit hook触发作业/构建。

好的,我会咬人:你为什么不简单地允许Jenkins被Subversion提交触发?

我见过人们为CVS这样做,因为Jenkins可能需要很长时间来轮询CVS以查看是否已经进行了CVS提交。但是,Jenkins只花了几秒钟来确定Subversion提交已经完成。

如果您真的坚持自己触发Jenkins构建,为什么不简单地将项目配置为允许远程触发?在每个作业的“构建触发器”部分下,指定一个令牌,然后使用wget:

触发该令牌
 wget $JENKINS_URL/job/foo?token=BUILD_NOW

(假设您设置的令牌为BUILD_NOW

这样,您不必担心修订,Jenkins将构建已签入的最新修订版。

其他人认为这是时间同步问题,但我不太确定。您正在参数中传递内部版本号。你可以尝试一些事情:

  • 在触发构建之前休眠30秒左右,看看是否有帮助。我不会将它保留在脚本中,因为它会延迟Subversion提交,但它可能会帮助您确定这不是时间问题。
  • 如果您向$REV添加一个然后触发Jenkin的构建怎么办?也许这会解决问题。

答案 3 :(得分:2)

如果Jenkins和Subversion服务器上的时间不同步,就会发生这种情况。确保时间保持在2秒的范围内。

答案 4 :(得分:2)

这是由于SVN服务器和jenkins之间的时间同步。换句话说,两台服务器的日期/时间不一样。我遇到了这个,我有三分钟的差异,我通过在项目的高级选项中执行jenkins作业之前配置延迟5分钟来解决这个问题。