问题描述:
遇到过几次这种情况:开发将代码提交之后,通过打包部署,发现部署到服务器上的代码不是最新的,还是修改之前的老代码。
打包部署流程背景说明:
gitlab——》jenkins服务器打jar包——》将打好的jar包过滤并推送到服务器A上build镜像——》将镜像推送到harbor仓库——》部署容器到服务器
1、代码没有提交成功
这个不用多说,遇到过几次。
2、jenkins上的缓存没有清除
例如test服务的构建包的缓存目录就是在jenkins服务器的~/.m2/repository/com/run/test-api 这个test服务打包会生成这个缓存api目录,因此在每次打包之前,脚本要写好先rm -rf ~/.m2/repository/com/run/test-api ,再进行打包操作。
3、jenkins上面的工程目录变更,而打包脚本没有更新
例如:jenkins上有一个叫“rpc”的构建项目。有一次同事将jenkins上面的rpc改成了“IOT”,然后构建部署,发现打出来的包里面的代码不是最新的。
原因是构建项目原来的名字是rpc,在jenkins的工程目录下面生成的目录也是rpc,当将rpc改成了“IOT”,就会在jenkins的~/.jenkins/workspace目录下面生成新的工程目录“IOT”,最新提交的代码打好的包也是在这里。但是jenkins的打包脚本并没有更新,还是默认去~/.jenkins/rpc目录下面找打成的jar包,导致不管构建多少次,每次找到的jar包都是rpc目录下面的,都是老的包。
因此将jenkins打包脚本修改成到jenkins服务器的 ~/.jenkins/workspace/IOT目录下过滤jar包就OK了
4、jar包命名规则变更,脚本原有命令过滤不到包
例如test-0.0.1.jar 这个包,原本jenkins打出来的包就是这个名字,中途开发变更了命名规则,变成了tes-0.0.1.RELEASE.jar ,但是jenkins的打包脚本并没有更新,还是用原来的命令ls ~/.jenkins/workspace/tes/target/tes-|grep -E "[0-9.]{1,7}.jar\$"去找这个jar包,然后推送到服务器A上面去build镜像,但是因为变更了jar包的名字,找不到新的包,实际上还是用A服务器上老的代码包打的镜像部署到服务器上,因此还是老的代码。
需要将jar包的命令规则改回来,或者修改jenkins上过滤jar包的命令为ls ~/.jenkins/workspace/tes/target/tes-|grep -E "[0-9.]{1,7}.RELEASE.jar\$"即可
(备注:因为推送jar包、build并push镜像、部署都是在jenkins脚本里面远程完成的,找不到tes-0.0.1.RELEASE.jar这个包,jenkins构建应该是会报错的,但是第一次遇到的是jenkins没有报错,所以没有及时看出问题,但是在构建第二次的时候,就报错了,提示找不到包,需要注意这个坑)
5、Dockerfile有变更,导致打包有问题
例如下面的这个构建,在jenkins构建的时候日志并没有报异常,但是部署好的镜像却是老的包。在服务器A上面去手动执行build镜像,发现少了一个文件,导致其实新的镜像并没有构建成功,而且harbor仓库里面镜像的更新时间也不是最新的:
[[email protected] test]# /usr/bin/docker build -t registry.seff.com/seff/test:latest /usr/local/src/test
Sending build context to Docker daemon 35.51 MB
Step 1 : FROM docker.io/java:jre-alpine
---> fdc893b19a14
Step 2 : ADD authz-service-crud.jar /var/www/
---> Using cache
---> 9be1e7e46629
Step 3 : ADD server.properties /opt/settings/
---> Using cache
---> 1a42bca461fe
Step 4 : ADD localtime /etc/
---> Using cache
---> 5668e7e0f7bb
Step 5 : WORKDIR /var/www/
---> Using cache
---> adaee0558909
Step 6 : ADD crud-dump /etc/
---> Using cache
---> 4ab8834f71a9
Step 7 : ADD crud-heap_trace.txt /etc/
**lstat crud-heap_trace.txt: no such file or directory**
因此将缺失的文件补充好,然后重新build镜像,再部署就OK了
原文地址:http://blog.51cto.com/10950710/2115004