Jenkins自动化部署前后端分离项目 (svn + Springboot + Vue + maven)有图详解

2023-09-18 19:03:03

1. 准备工作

本文的前后端分离项目,技术框架是:
Springboot + Vue + Maven + SVN + Redis + Mysql + Nginx + JDK
所以首先需要安装以下:

在腾讯云服务器OpenCLoudOS系统中安装jdk(有图详解)

在腾讯云服务器OpenCLoudOS系统中安装mysql(有图详解)

在腾讯云服务器OpenCLoudOS系统中安装nginx(有图详解)

在腾讯云服务器OpenCLoudOS系统中安装redis(有图详解)

在腾讯云服务器OpenCLoudOS系统中安装svn(有图详解)

在腾讯云服务器OpenCLoudOS系统中安装maven(有图详解)

在腾讯云服务器OpenCLoudOS系统中安装Jenkins(有图详解)

用svn上传前后端代码参考:

用svn上传idea和webstorm代码(有图详解)

2. 全局工具配置

登录Jenkins,在上篇文章中讲过

在腾讯云服务器OpenCLoudOS系统中安装Jenkins(有图详解)

自己服务器的IP+端口

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

maven配置如下:

在这里插入图片描述
文中画框的地方,就是上篇文章中的maven安装地址

在腾讯云服务器OpenCLoudOS系统中安装maven(有图详解)

JDK配置如下:

在这里插入图片描述
上文中的路径,就是服务器中jdk的安装路径,文章在腾讯云服务器OpenCLoudOS系统中安装jdk(有图详解)中有讲过

也可以 echo $JAVA_HOME找出

在这里插入图片描述

maven地址配置:

在这里插入图片描述

3. 插件安装

在这里插入图片描述
安装Public over SSH

Public over SSH: jenkins远程服务器发送文件,此插件作用是将svn上的代码自动打包部署到其他服务器上去

在这里插入图片描述
在这里插入图片描述

配置Publish Over SSH

在这里插入图片描述
拉到最底下,新增

在这里插入图片描述
在这里插入图片描述

备注:
这里的Remote Directory也可以不写,为空。因为新建的项目中也有配置jar上传的路径

不然两个地方到时候都配置了,maven打包生成的jar放置的路径就会叠加

配置目标主机密码并测试连接:
在这里插入图片描述
点击运用、保存
在这里插入图片描述
安装SVN:

在这里插入图片描述
在这里插入图片描述

每次安装完插件,可能不会生效,所以需要重启Jenkins

具体重启方法和重启路径请看这篇文章:
在腾讯云服务器OpenCLoudOS系统中安装Jenkins(有图详解)

cd /etc/init.d

./jenkins stop

./jenkins start

在这里插入图片描述

4. 部署SpringBoot后端项目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择你刚刚添加的svn用户:

在这里插入图片描述

增加构建步骤:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

增加构建后操作步骤:
在这里插入图片描述
在这里插入图片描述

Source files:源文件。就是maven打包后生成的哪个文件要打包到目标服务器

Remove prefix:移除前缀。因为maven打包后,会有几层文件夹,我们只需要把要部署的jar之前的文件夹都删除即可

Remote directory:远程文件夹。maven打包后形成的jar要部署到哪个路径下

Exec command:部署包jar文件到了目标路径下后,需要启动的shell脚本

参考:
对于maven有多个子工程的,本地maven打包后,形成的jar文件是这个:

在这里插入图片描述
fabricate-admin.jar
这个jar就是我们要部署到目标服务器并要启动文件fabricate.sh启动的jar
在这里插入图片描述

把jar启动文件上传至该路径下:
在这里插入图片描述
给文件夹赋权:

chmod -R 777 /usr/local/nginx/fabricate/

这里赋权两个作用:

  1. 给文件夹赋权,自动化部署时,生成的jar文件可以通过SSH传输到这边,不赋权读写权限的话,到时候写不进来
  2. 给fabricate.sh赋予启动权限,jar文件传输过来,可以启动这shell脚本
    在这里插入图片描述

启动文件如下:

export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/app/soft/jdk/jdk1.8.0_341 #你自己的jdk路径
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
APP_HOME=`pwd`
AppName=fabricate-admin.jar  #你自己的部署包jar的名字
echo "  =====关闭Java应用======"
PROCESS=`ps -ef |grep java |grep -v grep|grep $APP_HOME/$AppName|awk '{print $2}'`
for i in $PROCESS
do
  echo "Kill the $1 process [ $i ]"
  kill -9 $i
done
echo "  =====启动Java应用======"
nohup JAVA_HOME/bin/java -jar $APP_HOME/$AppName  > $APP_HOME/$AppName.log 2>&1 & 
echo $! > savePid.txt
cat savePid.txt
rm  savePid.txt

保存:

在这里插入图片描述

点击构建:

在这里插入图片描述
可看控制台日志:

在这里插入图片描述
在这里插入图片描述

如果构建失败,可以从控制台日志看错误信息,以下三个步骤也可排查:

自动化部署有三步:

1. svn下载代码到workspace,并用maven打包形成target文件夹,底下有项目部署包jar

一般默认的工作空是**/var/lib/jenkins/workspace**

在这个路径下看自己的代码是否通过svn下载到了工作空间
在这里插入图片描述
代码路径下是否经过了maven打包形成target文件夹,产生部署包jar
在这里插入图片描述

2. 推送jar到目标路径

可观察上一步产生的jar,有没有推过来
在这里插入图片描述
这个就是你配置的推送SSH的jar部署路径
在这里插入图片描述

3. 启动shell脚本

只需观察上文启动脚本中的输出日志文件是否实时生成:

在这里插入图片描述
out.log日志文件生成
在这里插入图片描述

5. 部署vue前端项目

更多推荐

七天学会C语言-第六天(指针)

1.指针变量与普通变量指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。普通变量是一种存储数据的容器,可以直接存储和访问数据的值。:intnum=10;//定义一个整数型普通变量num,赋值为10在例子中,变量num是一个普通整数变量,它直接存储了值10。指针变量是一种特殊类型的变量,它存储

面试经典刷题)挑战一周刷完150道-Python版本-第2天(22个题)

一、轮转数组给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。这用于旋转一个整数列表nums中的元素。k%=len(nums):这一行的目的是确保k的值在合理的范围内,因为如果k大于列表的长度len(nums),旋转是循环的,所以我们取余数来确保k在合适的范围内,以避免不必要的重复旋转。比如,如

【Java 基础篇】Java网络编程实时数据流处理

在现代计算机应用程序中,处理实时数据流是一项关键任务。这种数据流可以是来自传感器、网络、文件或其他源头的数据,需要即时处理并做出相应的决策。Java提供了强大的网络编程工具和库,可以用于处理实时数据流。本文将详细介绍如何使用Java进行实时数据流处理。什么是实时数据流?实时数据流是一连串持续不断到达的数据,需要及时处理

【UE 粒子练习】08——LOD概述

目录概念应用举例一、检查当前粒子系统中是否设置了LOD二、添加LOD三、LOD设置(单个粒子发射器)四、LOD设置(多个粒子发射器)概念在UnrealEngine中,LOD(LevelofDetail,细节层次)是一种优化技术,用于在不同距离或屏幕空间尺寸下使用不同的模型或网格,以提高性能并减少资源消耗。LOD技术的主

低功耗蓝牙物联网:未来连接的无限可能

物联网是连接各种设备和传感器的网络,其目的是实现信息的交换和共享,提高效率并优化生活。在这个领域,低功耗蓝牙(BLE)正在发挥着越来越重要的作用。低功耗蓝牙是一种无线通信技术,它的主要特点是低功耗和长寿命。在保证纽扣电池长时间使用的同时,BLE的广播模式功耗可以做到1mA以下,进入低功耗模式后甚至可以达到200ua以下

第一个 Go 程序“hello,world“ 与 main 函数

第一个Go程序"hello,world"与main函数文章目录第一个Go程序"hello,world"与main函数一.创建“hello,world”示例程序二.“hello,world”程序结构拆解三、main函数四、Go语言中程序是怎么编译的?一.创建“hello,world”示例程序创建一个叫做main的go文件

Haproxy负载均衡集群 超详细 (附部署实例)

Haproxy一、Web集群调度器1.1常用的Web集群调度器1.2常用集群调度器的优缺点(LVS,Nginx,Haproxy)1.2.1Nginx1.2.2LVS1.2.3Haproxy1.3LVS、Nginx、Haproxy的区别二、Haproxy2.1简介2.2Haproxy的主要特性2.3Haproxy应用分析

总结 HTTP 协议的基本格式和 fiddler 的用法

HTTP基本格式HTTP协议也是日常开发中非常常用的的一种协议,在众多协议栈里HTTP可能是实际开发中用的最多的。注意这里说的HTTP是指HTTP1以及HTTP2,他们都是基于TCP协议的,注意:如今最新版的HTTP3是基于UDP的。但如今在互联网中使用的最多的仍然是HTTP1.1的版本。在整个协议栈中,上层和下层之间

【VUE异常】el-popconfirm失效,@confirm事件不生效,点击没有任何反应,刷新页面才能点击

el-popconfirm失效,@confirm事件不生效,点击没有任何反应,刷新页面才能点击一、背景描述二、原因分析三、解决方案3.1方案一:使用@onConfirm3.2方案二:@confirm与@onConfirm同时使用3.3方案三:el-popconfirm标签外包裹一层标签一、背景描述项目中遇到一个奇怪的问

【实战项目之个人博客】

目录项目背景项目技术栈项目介绍项目亮点项目启动1.创建SSM(省略)2.配置项目信息3.将前端页面加入到项目中4.初始化数据库5.创建标准分层的目录6.创建和编写项目中的公共代码以及常用配置7.创建和编写业务的Entity、Mapper、Service、Controller等基础代码8.按照页面,从前端或者后端开始实现

数学建模——统计回归模型

一、基本知识1、基本统计量总体:研究对象的某个感兴趣的指标。样本:从总体中随机抽取的独立个体X1,X2,…,Xn,一般称(X1,…,Xn)为一个样本,可以看成一个n维随机向量,它的每一取组值(x1,…,xn)称为样本的观测值。统计量:样本是总体的代表,抽取后不直接利用样本的观测值进行推断,而是把样本所包含的有关信息集中

热文推荐