文档章节

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

donhui
 donhui
发布于 2015/08/10 13:18
字数 659
阅读 7471
收藏 27
在使用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修复了下:

参考:

© 著作权归作者所有

donhui

donhui

粉丝 51
博文 85
码字总数 39518
作品 0
杭州
程序员
私信 提问
加载中

评论(4)

myy321
myy321
感谢楼主分享
赵占涛
赵占涛
我也遇到了
新一jun
新一jun
赞一个,谢谢楼主的分析
阿拉校长
阿拉校长
分析的深入透彻,也遇到这个问题,谢谢0
解决jenkins打包时不能及时更新到最新代码的问题

首先要定位是否真的拉不到最新代码? 定位步骤如下: 1、在SVN上,查看show log,没有记录 2、登录Jenkins,查看构建的输出记录,Console Output, ctrl+f,若找不到最新代码,则可以确定是拉...

金龙鱼管家
2018/04/28
0
0
jenkins和docker实现自动化构建部署

应用场景 程序员开发应用,开发后需要提交svn,然后从svn拉取代码,进行构建,发布到tomcat中,发布,然后看呈现效果,这样的工作是频繁反复的在进行的,浪费了程序员的大量时间,那么能不能...

wsc449
2017/12/06
0
0
Jenkins 的svn插件下载的代码不是最新代码的问题

项目组使用Jenkins做自动化的每日编译和单元测试。经常发现,当提交完代码后,在Jenkins的每日编译代码还是旧代码,刚提交的代码并没有check out出来。 后来发现Jenkins服务器的时间要比svn...

郭恩洲_OSC博客
2015/08/12
0
1
持续集成工具Jenkins结合SVN的安装和使用

持续集成工具Jenkins结合SVN的安装和使用 2018年06月08日 11:30:23 止步前行 阅读数:2932 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxd1435513775/ar...

linjin200
01/17
0
0
小记Jenkins中因主机时间变更导致SVN无法更新到最新版本的坑

事情发生在2019-01-29日。 由于30日急于上线,而业务比较特殊,修改时间是最方便完成接近生产环境的测试。 故此,在29日晚上通过修改时间来完成了产品业务的测试。其他情况,比如服务器时区同...

Coody
01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦...

阿里云云栖社区
29分钟前
2
0
比特币第三方API大全

在开发比特币应用时,除了使用自己搭建的节点,也可以利用第三方提供的比特币api,来获取市场行情、进行交易支付、查询账户余额等。这些第三方api不一定遵循标准的比特币rpc接口规范,但往往...

汇智网教程
41分钟前
1
0
Dozer:Dozer异常java.lang.ClassCastException

这个问题是个很难发现的问题,因为代码本身没有错误,但就是无法找到报错原因 现记录下这个报错 java.lang.ClassCastException:com.XXX.ObjectA cannot be cast to com.XXX.ObjectA 代码中并...

琴兽
今天
2
0
Feign Retryer的默认重试策略测试

1、Feign配置 @Configurationpublic class FeignConfig { @Value("${coupon_service.url:http://localhost:8081}") private String couponServiceUrl; @Bean publ......

moon888
今天
2
0
关于不同域名下的session共享问题

如果登录,首页,分类,列表,产品都在不同的二级域名下,主域名不变,一定要保证里面的版本问题,不能为了更新而更新,这样哪个下面的session都访问不了。

dragon_tech
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部