总结之提交代码并部署到服务器上,为什么代码却没有更新?

问题描述:

遇到过几次这种情况:开发将代码提交之后,通过打包部署,发现部署到服务器上的代码不是最新的,还是修改之前的老代码。

打包部署流程背景说明:

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

时间: 2024-11-08 18:49:35

总结之提交代码并部署到服务器上,为什么代码却没有更新?的相关文章

JBPM(四)——把流程部署到服务器上

当我们的业务流程被设计开发完毕之后,会有许多相关的文件"散落"在工程中,其中包括: 定义流程的JPDL文件 根据图形化流程定义同步生成的流程图片文件(PNG格式) 业务流程中用于人机交互的表单页面文件 事件监听器等用户自定义代码的Java类文件 其他流程资源文件,例如小图标.css样式表.脚本文件.属性文件等 jbpm4支持将流程定义及其相关资源打包一个JAR(Java归档)格式的文件,部署到服务器上(其实就是服务所连接的JBPM数据库中),然后流程定义就可以被执行了. 一.如何将流程

SpringBoot项目部署到服务器上,tomcat不启动该项目

今天lz把项目重新传到服务器上后,重启tomcat遇到个问题,就是这个tomcat怎么都不启动这个项目,别的项目都没事,一番查找后发现问题所在. 我们先建个SpringBoot工程,重现一下问题: 写了一个简单的controller便于访问测试 可以看到是可以访问到的,接下下我们删除 ServletInitializer 类. 现在的项目结构变成这样: 重新运行一下工程,然后可以看到还是可以访问到的. 然后我们将删掉ServletInitializer 类的项目上传到服务器,看下tomcat启动

记录第一次将自己的网页部署到服务器上的过程

0 写在前面 近来又是疏于编写文章.2019春季学期的软件工程课程项目也已经如火如荼的启动了,我和我的团队负责的项目是实现一套基于物联网的智能机器人系统. 学校还算蛮给力,提供了一个服务器(虽然只是1核1G的),这样就可以将团队的主页给部署到服务器上,被大家访问了. 由于是第一次的部署,我在这个过程中遇到了不少坑,在这里简要记录一下~ 1 环境/工具 作为新手(而且我也不太会用Linux)我申请了一个Windows Server R2016的服务器. 网站的管理上,我则是使用了对新手友好,容易操

将网站部署到服务器上出现_STORAGE_WRITE_ERROR_问题

用的thinkphp3.2的框架,在本地运行没有问题,部署到服务器上(基于centos的LAMP环境)即报错,报错信息如下(完全看不懂...):求大神帮帮忙~~~~(>_<)~~~~ :(_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Home/f8995a0e1afcdadc637612fae5a3b585.php错误位置FILE: /var/www/html/shoppingback/ThinkPHP/Library/Think/Stor

SVN将一台服务器上的代码迁移到另一台服务器上

由于我们出差,需要把svn服务器上的代码同步到我电脑上,自己各种百度折腾了快一天才弄好,下面来分享下我的具体思路和操作步骤.有2种方式:第一种方式:直接将本地自己dowm下来的代码导入到本地svn服务器上.(缺陷是:没有把版本号同步上来,这种领导说不行,也不建议用这种方式)第二种方式:操作原始svn服务器,将原始svn服务器上需要导出的仓库进行备份,文件以dump的方式呈现.(这种方式更合适) 备份思路是:第一步:将准备要迁移的仓库导出 svnadmin dump第二步:在目标服务器上创建新的仓

sqlite数据库部署到服务器上的问题

试了一天...本地测试是好的(WIN10 64位+VS2015),部署到服务器上(WIN2008 32位+IIS6) 总是不行..按网上说了什么不要BUNDLE的,加入X86X64目录再放那个SQLite.Interop.dll到不同的目录,还是不行,还是出错, 最后修改了应用程序池的标识里的预定义账户为本地系统就好了..还有我按网上做的IIS6运行32位模式的做了结果是没有任何反应的,可能是我的服务器本 来就是32位的原因的吧!!!

利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码

```java java -agentpath:./lib/libjrebel64.so -Drebel.remoting_plugin=true -Drebel.remoting_port=12345 #热部署 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 #远程调试 -jar target.jar # springboot项目 ``` 加上以上参数,即可以实现 远程断点调试,并且 本地代码修改了,立

DJANGO项目部署到服务器上

---- 说明: 本文章来自于 http://www.pythonav.com/wupeiqi/3.html  是武沛齐老师个人博客上取的内容. 尊重老师的成果. 小白的项目部署 项目开发完毕后,需要将代码放到服务器上,这样用户才能访问.接下来我们一步一步来进行一波部署操作. 1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 示例源码:猛击下载 然后将源码上传至服务器

如何将Java Web项目部署到服务器上

项目部署 我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点:① 基础的 JDK 环境② 一个 Web 服务器.如 Tomcat.JBoss③ 一款数据库.如:mysql 对于云服务器上 Java Web 项目的部署,和平时在 Windows.Linux 下部署是一样的.最多也就是只能使用纯命令模式来操作而已,其实过程都一