先讲下我这边情况,采用jenkins pipeline(流水线)模式进行部署项目,他的好处是可以自定义构建部署每一环节内容,比如一些定制化需求就可以通过pipeline的形式进行展示,如下图
在其中部署开发环境这个节点报错了,连接服务器失败,而整体流水线又没有标红(上图幻色那条),查看服务器发现文件还是在jenkins服务器上,并没有推送到需要部署的目标服务器,查看这段日志信息,发现连接远程服务器中断了,没有往下执行。
由于没有详细日志说明,一点点尝试,然后开始排查问题,首先检测Jenkins设置ssh是否正常,并没有问题。
之后Jenkins服务器上通过SCP命令将部署文件直接上传目标服务器看是否成功,然后果然失败了没有连接服务器提示Cannot count remote files: there is no such file or directory,提示没有这个文件和目录,心想:不对呀在这个文件夹下面确实纯在back目录,而这个目录是专门存放后端jar包的地方怎么会没有。
//scp手动推送代码命令格式
//scp -r Jenkins源文件地址 用户@ip: 需要推送目的地址
scp -r /home/op/jenkins/workspace/committee_black root@192.168.0.229:/home/op/back
再次尝试将op用户切换为root用户,一下子成功了
既然这样,同理我把Jenkins的ssh连接目标服务器用户切换为root也能成功,马上尝试了下果然如此
事情到这,才想起来之前配置Jenkins配置ssh使用op用户,而且前端都能正常将代码推送到服务器上(上图web目录)这两者有什么不同吗,仔细观察果然发现问题,重点在于用户组和文件权限上面,由于web目前是op用户创建的,根据现有的权限规则创建该文件夹的用户才会拥有对该文件夹有写入权限。而back文件夹不是op用户创建,所以使用op用户没法将相关文件写入到back文件夹中。
最后解决方法,直接把back文件删除,通过op用户创建back文件得以解决,也可以通过修改back文件权限使得op用户拥有该文件写入权限。
最终结果,如下图,目前服务器已经获取文件,可以接着写后面启动jar的命令了