繁体   English   中英

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

[英]Jenkins CI uses wrong svn revision for build

目前我正在使用 Jenkins CI 服务器,我想通过 svn 提交后挂钩触发作业/构建。 到目前为止,它按预期工作,但构建使用以前的 svn 修订版。

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

提交后挂钩如下所示:

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 中的检出策略配置为“始终检出新副本”。 怎么了? 我仍然从那开始,还有很多东西要学。 所以请记住这一点,以便回答我。 :-)

遇到同样的问题,发现这个

基本上你需要 append @HEAD 在 SVN url 的末尾,例如:

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

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

很确定 Jenkins 在结帐和更新时使用日期/时间。

嗨,目前我正在使用 Jenkins CI 服务器,我想通过 svn 提交后挂钩触发作业/构建。

好吧,我咬一口:你为什么不简单地允许 Jenkins 被 Subversion 提交触发?

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

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

 wget $JENKINS_URL/job/foo?token=BUILD_NOW

(假设您设置的令牌是BUILD_NOW

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM