jenkins部署前后端分离项目

/ 默认分类 / 没有评论 / 2186浏览

Git安装

yum install git

Jdk安装

官网下载 JDK8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

安装
# 创建目录
mkdir /usr/local/java
# 拷贝安装包到指定目录
cp jdk-8u301-linux-x64.tar.gz   /usr/local/java/
# 进入java安装目录
cd /usr/local/java/
# 解压jdk安装包
tar -zxvf jdk-8u301-linux-x64.tar.gz
# 删除安装包(可选)
rm -rf jdk-8u301-linux-x64.tar.gz 
配置环境变量
# 编辑配置文件
vim /etc/profile
# 最下面添加如下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin 

# 然后ESC :wq保存退出
:wq
# 配置生效
source /etc/profile
# 检查安装情况
java -version

Node安装

node下载地址: http://nodejs.cn/download/current/ https://nodejs.org/dist/

下载离线包,上传到/usr/local/node

创建软链:

# 解压
tar -zxvf node-v16.17.1-linux-x64.tar.gz
# 重命名
mv node-v16.17.1-linux-x64 node-v16.17.1
ln -s /usr/local/node/node-v16.17.1/bin/node /usr/local/bin
ln -s /usr/local/node/node-v16.17.1/bin/npm /usr/local/bin

Maven 安装

下载

wget  https://dlcdn.apache.org/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

解压

tar -xzvf apache-maven-3.6.1-bin.tar.gz

配置系统maven环境

编辑系统环境文件profile,该文件类似于windows里的环境变量。

vi /etc/profile

注意,配置的变量,请指向自己解压的maven路径:

export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH

:wq,退出保存,然后重新加载一下配置:

source /etc/profile

查看maven版本,测试配置生效:

mvn -v

配置镜像加速+指定仓库地址

配置jar包下载路径,路径指向自己的

<localRepository>/usr/local/maven/repository</localRepository>

配置阿里镜像加速,默认是从中央仓库拉取。

<mirrors>
 <mirror>
   <id>alimaven</id>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   <mirrorOf>central</mirrorOf>        
 </mirror>
</mirrors>

:wq,退出保存。

jenkins安装

下载地址 https://mirrors.jenkins.io/war-stable/

下载

wget https://sg.mirror.servanamanaged.com/jenkins/war/2.346/jenkins.war

安装

nohup java  -jar jenkins.war --httpPort=6888  2>&1 &

插件

# maven项目插件
Maven Integration  
# 备份插件
ThinBackup   
# 可以在构建时进行分支选择
Git Parameter Plug-In
# NODE前端发布
NODEJS
# 角色配置
Role-based Authorization Strategy
# 开机自启
Startup
# 日格式化
Date Paramete

配置

Maven 配置

/usr/local/maven/apache-maven-3.6.1/conf/settings.xml

JDK

#jdk8    
/usr/local/java/jdk1.8.0_371

Maven

#Name  
maven3.6
# MAVEN_HOME   
/usr/local/maven/apache-maven-3.6.1

NodeJs

image-20230609094732369

后端部署配置

General

后端-XX系统-演示环境

源码管理

http://192.168.1.7:1234/mrfr/backend/mrfResource.git

构建环境

pom.xml
clean package  -Dmaven.test.skip=true

Post Steps

#!/bin/bash

#环境
ENV=test

#源jar路径,打包完成之后,target目录下的jar包名称
JAR_NAME=mrf-admin

#target打包生成jar包的目录
# 以具体的打包位置为准,可以先构建一次项目,通过日志查看打包的目录
JAR_PATH=/home/maruifu/.jenkins/workspace/后端-XX系统-测试环境/mrf-admin/target    
 
#打包完成之后,把jar包移动到运行jar包的目录
JAR_WORK_PATH=/usr/local/backend/mrfr/test
 
echo "查询进程id-->${JAR_NAME}_${ENV}"
PID=`ps -ef |grep java|grep "${JAR_NAME}_${ENV}" |grep -v grep|awk '{print $2}'`
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		sleep 1
        echo "等待1秒钟" 
        sleep 1
        echo "等待2秒钟" 
		echo "${JAR_NAME}_${ENV} 退出."
	else
		echo "${JAR_NAME}_${ENV} 已经停止了"
	fi
echo "正在结束进程完成"

echo "正在复制jar包到执行目录"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH/${JAR_NAME}_${ENV}.jar
cd $JAR_WORK_PATH

echo "正在修改文件权限"
chmod 755 ${JAR_NAME}_${ENV}.jar
 
echo "正在启动${JAR_NAME}"
BUILD_ID=dontKillMe nohup java -jar ${JAR_NAME}_${ENV}.jar   --spring.profiles.active=${ENV}  2>&1 &
echo "${JAR_NAME}启动成功"

前端部署配置

General

前端-XX系统-前台-测试环境

源码管理

http://192.168.1.7:1234/mrfr/frontend/backstage.git

构建环境

Provide Node & npm bin/ folder to PATH

Post Steps

#!/bin/bash

#环境
ENV=test
 
#打包生成dist的目录
DIST_PATH=/home/maruifu/.jenkins/workspace/前端-XX系统-前台-测试环境


#打包完成之后,把DIST移动到Nginx执行的目录
UI_WORK_PATH=/usr/local/frontend/mrfr-ui/


echo  "查询node版本!"
node -v &&
echo  "正在安装依赖!"
npm install &&
echo  "正在删除上次打包的文件"
rm -rf  $(ls -d *dist* | tail -1)
echo  "安装构建打包!"
npm run build:${ENV} 

DIST_NAME=$(ls -d *dist* | tail -1)
echo  "获取打包文件夹名:${DIST_NAME}" 
echo  "正在复制文件到执行目录" 
cp -r  ${DIST_PATH}/${DIST_NAME} ${UI_WORK_PATH}
echo  "正在删除${UI_WORK_PATH}dist" 
rm -rf  ${UI_WORK_PATH}dist

cd ${UI_WORK_PATH}
mv  ${DIST_NAME}    dist
echo  "部署完成了!"
echo  "部署完成了!"
echo  "部署完成了!"

权限配置

角色设置

image-20230614094729103

用户设置

image-20230614094839898

多种备份方式

拷贝文件备份

手动备份jekins_home目录的以下文件:

config.xml
hudson*.xml
插件名*.xml
job目录
user目录

备份与还原-ThinBackup

备份

1、以管理员身份登录Jenkins,点击 系统管理 – ThinBackup

2、点击Settings ,设置备份文件的保存目录,同时可以设置备份的一些特殊属性

image-20231030094246925

image-20231030094408944

3、点击 Backup Now,即可完成备份

还原

1、把ThinBackup备份的文件(一般是文件夹或zip),拷贝到 settings中设置的备份目录下或者 设置 Backup directory 为备份文件目录

2、点击 ThinBackup – Restore ,就还原成功了。

应用回滚

创建选择参数

image-20231030140912026

设置GIT地址

image-20231030141019965

添加脚本-应用备份

case $status in
  deploy)
    echo "创建当前构建版本备份目录"
    bak_dir="${WORKSPACE}/bak/${BUILD_NUMBER}"
    if [ -d $bak_dir ]
    then
      echo "目录已存在"
    else
      mkdir -p $bak_dir
    fi
    echo "开始构建..."
    mvn clean package -Dmaven.test.skip=true
    echo "构建结束"
    cp -f ${WORKSPACE}/maruifu-admin/target/*.jar $bak_dir
    echo "当前版本已备份完成!"
    ;;
  rollback)
    echo "创建当前构建版本备份目录"
    bak_dir="${WORKSPACE}/bak/${BUILD_NUMBER}"
    if [ -d $bak_dir ]
    then
      echo "目录已存在"
    else
      mkdir -p $bak_dir
    fi
    echo "开始回滚..."
    echo "回滚的版本号是: ${version}"
    cp -f ${WORKSPACE}/bak/$version/*.jar $bak_dir
    ;;
  *)
    exit
    ;;
esac

添加脚本-删除多余备份

# 保留最新的5个
KeepVersionNum=5
# 备份所有版本所在目录
FileDir=${WORKSPACE}/bak/
cd $FileDir
# 备份所在目录中有多少目录
FileNum=`ls -l |grep "^d" | wc -l`

echo "开始检查构建旧版本个数,最多保留 $KeepVersionNum 个最新版本"
echo "当前保留版本数量: $FileNum"
# 当前备份版本的数量 > 想要保留的版本数量,则执行以下循环
while (( $FileNum > $KeepVersionNum ))
do
  # 将当前目录下的所有目录以时间正序排序,head -1显示第一个
  OldFile=$(ls -rt | head -1)
  echo "$(date "+%Y:%m:%d %H:%M:%S") 删除多余旧版本: ${OldFile}"
  # 删除多出来的旧版本
  rm -rf $FileDir/$OldFile
  let "FileNum--"
done

echo "正在部署的版号是:${BUILD_NUMBER}"

添加脚本-应用启动


# 备份所有版本所在目录
FileDir=${WORKSPACE}/bak
cd $FileDir
# 将当前目录下的所有目录以时间正序排序,head -1显示第一个
lastFile=$(ls -t | head -1)
cp -f $FileDir/$lastFile/*.jar /app/backend/dms/test-web

cd /app/backend/dms/test-web

/app/backend/dms/test-web/dms.sh restart

echo "部署成功"