转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
之前遇到过几次这种情况:研发将代码提交之后,通过打包部署,发现部署到服务器上的代码不是最新的,还是修改之前的老代码。
版本升级运行流程:
?
test这个服务打包时会在Jenkins服务器上生成一个api缓存目录,里面是一些打包需要引用的模块。
如果这个目录不删除,下次打包的时候就会直接使用这个api包,而不会去仓库拉取最新的引用模块,所以打出来的包就有可能会出问题。
因此在每次打包之前,先清理掉应该清理的缓存文件就好。
Jenkins上有一个叫“ABC”的项目,有一次同事将Jenkins上面的“ABC”改成了“ABCD”,所以在构建之后,新的jar包会在.jenkins/workspace/ABCD下面。
然而构建脚本并未更新,依然会去.jenkins/workspace/ABC中寻找jar包推送到服务器上build镜像,所以,即使发布100万次,代码还是老代码!
有个工程目录打出来的jar包本来是叫test-0.0.1.jar,某一天研发突然变更了命名规则,打好的jar包名字变成了tes-0.0.1.RELEASE.jar 。
但是Jenkins的打包脚本并没有更新,过滤jar包的正则表达式根本找不到最新的包。
实际上在Jenkins的脚本里面,推送jar包到服务器A的这个步骤是执行失败了,build镜像的时候还是用的A服务器上老的jar包,然后部署到服务器上,因此还是老的代码。
要命的是Jenkins在构建的时候找不到jar包居然还没报错!!!
例如下面的这个构建,在Jenkins构建的时候日志并没有报异常,但是部署好的镜像却是老的代码。
手动执行命令build镜像,其实发现少了一个文件,导致其实新的镜像并没有build成功,而且harbor仓库里面镜像的更新时间也没有变化。手动build镜像报错如下:
[root@slave-4 test]# /usr/bin/docker build -t registry.seff.com/seff/test:latest /usr/local/src/test
...... #此处省略一万字
Step 7 : ADD crud-heap_trace.txt /etc/
**lstat crud-heap_trace.txt: no such file or directory**
dockerfile文件丢失,镜像未打包成功,但Jenkins最后运行的结果显示Success。只是在中间报了一串错误,提示dockerfile找不到,这样子的错误很容易被忽略掉:
所以,如果遇到这种清理,发版到白了少年头,代码还是不会更新的。。。