项目背景

因公司网络和测验服务器带宽有限,每次打包jar包后上传到服务器速度很慢(100多兆的包差不多上传10分钟),所以决定弄一个主动化布置,每次代码提交(pull request)主张主动布置,经测验第一次打包比较慢(需求下载依赖),之后就很快了,基本上几十秒不到1分钟。

项目结构

  • 服务器端项目为springboot项目,gradle构建(一向用maven,也是这个项目才触摸这个)
  • 后台前端项目为npm项目,里边详细是什么架构不知道
  • 微信小程序前端项目不需求布置服务器

装置jenkins

服务器为centos7,已有的java版别为1.8,不能动,查了下,找了个最新的能支撑到1.8的版别。

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.346-1.1.noarch.rpm #我能找到的最新的支撑1.8版别jdk的包
rpm -ivh jenkins-2.346-1.1.noarch.rpm #装置
vim /usr/lib/systemd/system/jenkins.service
# 修改 User=root Group=root  ,其实这样是不安全的,测验环境能够,出产环境必定不要这样做。以下目录权限一样不主张,可是能够在测验或开发环境快速布置,绕过许多坑
chown -R root:root /var/log/jenkins
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/lib/jenkins
systemctl start jenkins.service  #发动服务,默认8080端口,能够在jenkins.service中修改

拜访网页地址,这时分就能看到页面了。我当时忘了截取了,从别的地方拷贝了一张,主要是暗码需求上服务器去查

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
装置体系推荐的一切插件,装置完结后有一个用户设置页面,主张设置一个用户,不要用超管用户登录。

jenkins基础装备和插件装置

  • 源代码保管在gitee,所以需求加一个gitee插件
  • 后端用gradle构建,所以需求装置gradle
  • 前端需求装置npm
  • 需求装备一些凭据用于拉取代码,还需求装备一个hook用于告诉jenkins主动构建代码

装置和装备插件

装置插件

点击:体系办理->插件办理进入插件办理界面 我这个是已经装置的,挑选“可选插件”然后搜索相应称号,就能够进入装置界面,等一会儿装置好jenkins主动重启,然后就能够用了

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
一切插件装置方法都是一样的,不再赘述。

装备插件

点击:体系办理->大局东西装备进入东西装备界面,gradle和npm装备如下,别名自己随意起,自己能记住就行,后边要用到,必定要记得点保存。这一步相当于在服务器上装置你需求的编译环境。

Jenkins+gradle+npm+gitee自动化部署前后端分离项目

Jenkins+gradle+npm+gitee自动化部署前后端分离项目

项目装备

完结以上作业后开端项目装备,点击新建使命,如下图所示:

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
首要我们新建一个文件夹,最终一个选项,然后输入一个名字,文件夹的优点是能把一个项目的多个子项目放到服务器的一个作业目录下,避免服务器上的源代码文件夹乱。

然后新建两个“构建一个自由风格的软件项目”,一个是后端代码,一个是前端代码。

关于源码拉取

我在网上查到许多源码拉取用的gitee插件,但是我用尽浑身解数也没成功,不纠结了,拿gitee当一个一般git服务器操作就能够了,供给两种成功的拉取源码方法:

方法一:直接运用用户名、暗码

由于我公司的gitee企业版上有一个超管账号平常是不提交代码的,只做办理用,所以直接用这个账号就能够,装备如下:

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
其中URL,运用https:// 方法,认证新建如下,直接输入用户名和暗码即可,别的不必填
Jenkins+gradle+npm+gitee自动化部署前后端分离项目

方法二:运用rsa秘钥

与服务器拉取账号暗码一样,首要在服务器生成秘钥

ssh-keygen -t rsa  #如果以前生成过,直接跳过这一步
cat /root/.ssh/id_rsa  #这个是私钥,装备到jenkins上
cat /root/.ssh/id_rsa.pub #这个是公钥,装备到gitee仓库上

运用秘钥拉取代码,git仓库地址URL装备为git@xxxxx,ssh这种地址,而不是https:// 地址,必定要注意

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
装备拜访秘钥选项,类型ssh username with private key username 字段无限制,自己起一个

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
挑选直接填写秘钥,然后把上面服务器查到的私钥粘贴进去,要粘贴完好,首尾不要有空格 然后上gitee平台,进入项目代码办理页面,将服务器查到的公钥粘贴到项目的布置公钥中,如下图所示:

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
标题随意填,公钥粘贴完好,首尾不要有空格

两种方法都是能够的,对任何git服务器通用,都能够这样做。

构建触发装备

gitee的webhook能够实时告诉jenkins开端构建项目,对任何项目都一样,装备如下:

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
标红方位为需求仿制到gitee平台装备的接收告诉的接口地址

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
首次装备的时分,需求点生成来生成一个暗码

然后将上面两张图中的接口地址和暗码仿制到gitee对应项目的WebHook装备中,进入对应项目代码仓库,设置,挑选新建webhook,如果是企业版会跳转到这样一个页面,个人版的应该也相似

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
填写url和暗码,挑选需求告诉jenkins的事件,详细的设置依据自己项目主动化构建的触发条件设置即可。

后端项目装备

拉取代码和webhook装备不再赘述

Jenkins+gradle+npm+gitee自动化部署前后端分离项目

如上图所示:

  • 挑选gradle,在上文中大局东西装备中设置的称号;
  • 设置使命,就是在idea中履行的gradle指令称号,直接仿制过来就行(设置完这一步就已经能够在服务器上生成可运转的jar包了)
  • 履行shell,这一步主要是在服务器上发布jar包,我给一个示例代码,我们可依据自己需求改
sudo /{jar包发布途径}/{服务指令脚本}.sh stop  # 停止正在运转的服务器端服务
sleep 2
sudo rm -rf {jar包发布途径}/{jar包称号}.jar  #删去旧的jar包
sleep 2
sudo mv /var/lib/jenkins/workspace/{jenkins项目作业途径}/build/libs/{生成的jar包称号}.jar   {jar包发布途径}/{jar包称号}.jar  #将生成的新jar包移动到项目发布途径
sleep 2
sudo /home/gxtvmall/server/mall.sh start  #发动服务器端服务器

前端项目装备

拉取代码和webhook装备不再赘述

Jenkins+gradle+npm+gitee自动化部署前后端分离项目
首要挑选 “Provide Node & npm bin/ folder to PATH NodeJS Installation” 然后挑选nodejs版别,为上文中大局东西装备中装备的nodejs称号
Jenkins+gradle+npm+gitee自动化部署前后端分离项目
然后构建部分必定挑选履行shell,之前我这儿弄错了,搞了好久,供给一个示例脚本,我们依据自己需求看着改

node -v
npm -v     #没意义,就是看日志避免出问题
npm install   #项目途径下限装置依赖
npm run build  #  编译
sleep 2
sudo rm -rf {前端发布途径}/*  # 我用的nginx,这个途径是nginx的静态资源地址
sleep 2
mv /var/lib/jenkins/workspace/{jenkins项目作业途径}/{dist编译输出途径}/*  {前端发布途径}/  #将新编译输出的dist目录下文件移动到nginx的静态资源发布途径

打完手艺!