Jenkins workspace和服务器代码不一致问题

项目是php的代码,在仓库中删除一个文件之后,再次构建,然后push到web机器上,发现对应文件在web机器上并没有被删除,求助解决办法

1赞

你在仓库中删除了文件,你执行 jenkins 编译的时候,脚本前面有去执行代码库的更新同步操作吗?

我使用的是ssh-server插件发布的,每次构建之前都会pull代码的,而且每次都会清空上一次的构建

你是每次都清空删除了工程重新拉代码? 还只是清空了编译的结果? 要是每次都重新拉代码,那不可能会有你删除的文件存在。

php的代码,拉下来再push到服务器的。每次构建之前我都会清空workspace的也就是说每次都是拉取的最新的代码。再通过ssh-server插件push到服务器上去。问题就出在服务器这边,在仓库删除文件后,所push到的服务器上的对应文件不会被删除

在仓库里删除文件,你确认删除后有提交,产生新的 commit 了吗?

确认的,谢谢您的回复

确认删除后有提交,那到 workspace 的工程目录下,查看一下新拉的工程,删除的文件会在新拉工程里吗?

删除提交之后,workspace没有的,因为每次构建之前我都会清空workspace的,但是貌似远程机器是只会增量更新的,push的时候不会对文件数进行比较删除,只是单纯push新增的文件

通过这几句我猜测你们的流程是不是这样的:
1、通过jenkins从代码仓库pull下来代码
2、把pull下来的代码scp到web服务器?

主要问题在第二步,你们是怎样将代码“push"到web服务器的?麻烦回复第二步中从jenkins ”push“到web服务器的方式。

如果是scp的话,web服务器上只是做增量及相同文件名覆盖,做不到和仓库/workspace中代码强一致。
建议:
1、通过rsync 添加–delete参数强制同步代码
2、备份/删除 web服务器代码然后再scp新代码到web服务器
不管用哪种方式,做好备份,方便随时回滚

1赞

是的,我感觉是这个插件的缺陷,像是scp过去的

就算是插件,那执行的 log 还是可以看到的,执行的过程抓取出来看看。

谢谢提醒,这个忘记了 ,晚点我仔细看下日志

https://www.coder.work/article/1523583
这篇帖子和我一样的问题,或许描述的比我清楚

你必须要搞清楚 git 的机制及 jenkins 工程的流程逻辑关系,否则你还是很迷茫。

谢谢了,有办法处理这个问题了。感谢

如问题解决了,也请发个新帖详细总结分享一下,希望帮助到其他同学也遇到同样问题。 :ok_hand:

行的行的行的行的行的