每周一坑-jenkins发布拷贝不了文件到远程

jenkins发布拷贝不了文件到远程
        好久没写这个专题了~~~~
  今天部署一个工单系统的时候,架构前后端分离:前端nginx代理的静态目录(npm编译),后端一个war包(跑在tomcat里面)
        简单介绍下这个项目结构,前后端代码用的是同一个gitlab地址,所以需要用不同目录来区分前后端,代码结构如下:

  今天主要是讲jenkins配置里面的构建后操作:Send build artifacts over SSH

 一、项目前端配置

 1、【构建】——》 【执行shell】配置 

前端npm编译,没啥问题,直接进去frontend目录,运行关键两条命令:

cd xxx-frontend

npm install
npm run build:test

##最终会生成一个dist目录,拷贝到远程发布
tar -zcf dist.tar.gz dist

 2、【构建后操作

  其中shell 脚本主要做的工作是把dist.tar.gz解压,然后把里面的文件拷贝到nginx默认网站根目录 html 路径。最后nginx虚拟主机配置文件指向该目录,浏览器即能访问。

 

二、项目后端配置

  后端,这个有点坑~~~

  看架构图,很多个pom.xml文件,然后开发说直接用最外层的 pom.xml 去编译就行(就是backend后面的第一个pom.xml)

1、【Pre Steps】和 【Build】 配置

 

 2、【构建后操作】

  在jenkins配置中的“构建后操作”,Send build artifacts over SSH,配完之后一直报错:
   pom.xml文件编译后,我发现 app目录和 xxx-party 目录都生成 target目录,里面都有各自的war包

   当时跟开发确认过,app下的war包才是需要的,不要拿 xxx-party下的。

   在我贡献了10个jenkins发布报错后,发现这样的配置才是正确的:

   首先即使在上面,已经进去到 backend 目录下了(Pre Steps 图),我们理所当然地会以为直接从 backend 算起的相对目录来数这个war包位置(Source files),其实是不对的,要从backend 算起!!!!

如下图:

   简单说下为啥会这样(如果我理解不对,欢迎读者指出 ^___^ )

   经过简单搜集资料(有点困,速战速决~~~),默认情况下,会将Jenkins运行的工程文件目录下的文件夹作为源文件路径来传输文件,啥意思,也就是从/var/lib/jenkins/workspace/{你在jenkins新建的工程名} 开始算起。假设我在jenkins建的工程名叫:ljy,backend在我ljy后一个位置,源文件路径(Source files)从ljy开始算起,所以上面要写全 backend/xxxxx 了

   由于我这里从来没有设置相对路径,所以配相对路径肯定就错了,更专业的名词叫:自定义工作区间【参考:【https://blog.csdn.net/fan_haha/article/details/110224311】】,我公司jenkins没有这个配置,那就按默认的算,从工程文件目录文件夹开始算起!

   其实想想,我前端配置就是按这个规则来的,后端竟然随心所欲乱搞,所以就报错咯~~~

posted @ 2022-07-04 22:25  windysai  阅读(1077)  评论(0编辑  收藏  举报