Jenkins问题:SVN插件未更新到最新代码

举报
小虚竹 发表于 2021/10/18 23:50:11 2021/10/18
【摘要】 Jenkins使用教程相关系列 目录 目录 分析原因 解决方案 分析原因 简析Jenkins的SVN插件未更新到最新代码 在使用Jenkins做持续集成时,遇到Jenkins的SVN插件没有更新到最新的代码的情况。 例如,在代码提交之后就立即使用Jenkins更新代码,结果刚提交的代码没有被更新到,更新到的代码是旧版本...

Jenkins使用教程相关系列 目录


目录

分析原因

解决方案


分析原因

简析Jenkins的SVN插件未更新到最新代码

在使用Jenkins做持续集成时,遇到Jenkins的SVN插件没有更新到最新的代码的情况。

例如,在代码提交之后就立即使用Jenkins更新代码,结果刚提交的代码没有被更新到,更新到的代码是旧版本的。

查阅网上相关内容,有一种说法为:

Jenkins服务器时间与SVN服务器时间不一致,Jenkins的SVN插件是使用时间标签下载,而不是取HEAD,

因此如果svn服务器的提交代码时间比Jenkins的当前时间晚,该代码就不会被更新。

所解决问题的方法是:

只要将Jenkins服务器时间与SVN服务器时间设置成一样的就可以。

没错,上面是解决了问题,但Jenkins的SVN插件是与时间戳相关的SVN revision吗?

查看某个Jenkins Job的构建日志,在使用SVN插件更新代码时,日志如下:

Updating svn://repository_path at revision '2015-08-06T08:48:12.490 +0800'

从上面可以看出来,该次构建相应的revision确实是构建时间戳。

 

那么,可以让Jenkins的SVN插件更新代码时,设置revision为HEAD吗?

答案是可以的,在SVN URL加@HEAD后缀即可,Jenkins的SVN插件是支持这个的。

在SVN URL加@HEAD后缀后,构建Jenkins Job后日志输出如下:

Updating svn://repository_path@HEAD  at revision HEAD

而且这样确保更新的代码是最新的,不会因为Jenkins服务器与SVN服务器之间的时间差受到影响。

注:HEAD是SVN revision关键字,表示版本库中的最新版本。

 

通过svn help查看svn checkout/update的帮助文档,关于revision选项,截图如下:

由上可见,revision选项有:NUMBER(revision number),'{' DATE'}'(时间戳)以及revison关键字(HEAD、BASSE、COMMITTED、PREV)。

 

通过查看Jenkins SVN插件的源码:

WorkspaceUpdater.java部分源码截图如下:

从注释中可以看出获取SVN revision的策略:

// for the SVN revision, we will use the first off: 
// - a  @NNN suffix of the SVN url 
// - a value found in a RevisionParameterAction 
// - the revision corresponding to the build timestamp

 

可见,对于SVN revision,按如下优先级获取:

- SVN url的@NNN后缀(@NNN是svn revision)

- RevisionParameterAction中的值,RevisionParameterAction主要用于参数化构建,保持两个build之间revision的一致性

- 构建时间戳相对应的revision

 

之前,该注释有点小错误,提交了个Pull Request修复了下:

https://github.com/jenkinsci/subversion-plugin/pull/130

 

参考:

http://blog.chinaunix.net/uid-26598889-id-3402223.html

http://www.tuicool.com/articles/B326v27

https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin

https://github.com/jenkinsci/subversion-plugin


解决方案

综上所述,解决方案有两种:

一、只要将Jenkins服务器时间与SVN服务器时间设置成一样的就可以。

二、jenkins构建时,在SVN路径上,增加@HEAD 强制获取最新代码版本

Repository URL

http://localhost:9527/svn/trunk/zhw@HEAD

 

文章来源: xiaoxuzhu.blog.csdn.net,作者:小虚竹,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaoxuzhu.blog.csdn.net/article/details/112961900

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。