栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

jenkins自动部署版本回退

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jenkins自动部署版本回退

系统版本ubuntu 20.4 LTS WSL
tomcat版本apache-tomcat-8.5.30
jenkins.war版本2.313
java1.8.0
maven3.6.3
安装java,maven环境,我这里使用ubuntu

maven使用apt安装的,jdk使用源码装的

安装jdk
tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/ 				#解压jdk至/usr/local

在/etc/profile文件文件底部添加如下内容,保存退出并source /etc/profile使改动生效

export JAVA_HOME=/usr/local/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
安装maven
sudo apt update
sudo apt install maven #安装maven,默认安装路径为/usr/share/maven

在/etc/profile文件文件底部添加如下内容,保存退出并source /etc/profile使改动生效

export M2_HOME=/usr/share/maven
export MAVEN_HOME=/usr/share/maven
export PATH=${M2_HOME}/bin:${PATH}
安装tomcat,jenkins

首先解压tomcat

tar -zxvf apache-tomcat-8.5.30.tar.gz -C /usr/local/ && mv /usr/local/apache-tomcat-8.5.30 /usr/local/tomcat

然后把下载好的jenkins.war移动至 webapps,因为tomcat支持直接以jar,war包的形式来启动项目,所以启动tomcat也就是启动jenkins

mv /soft/jenkins.war /usr/local/tomcat/webapps/

启动jenkins

bash /usr/local/tomcat/bin/startup.sh

访问http://172.25.1.74:8080/jenkins,按照提示完成安装即可

创建project进行构建

新建test,选择构建一个自由风格的软件项目,然后点击确定

然后选择参数化构建过程,分别添加选项参数,字符参数

然后选择源码管理,填自己的仓库

构建环境 选择Delete workspace before build starts

然后在构建步骤里新加一个shell,我红框圈住的地方已经做了注释,正常情况是可以启动java程序的,但是写在这里发现部署成功后,没有java的程序,日志也是为空。所以最后在主机上写了个shell来代替。

#!/bin/bash
cd ${WORKSPACE}/ && mvn install
cd ${WORKSPACE}/group-module &&  mvn clean package -Dmaven.test.skip=true

case $Status  in
  Deploy)
    echo "Status:$Status"
    path="/opt/bak/${BUILD_NUMBER}"      #创建每次要备份的目录
    if [ -d $path ];
    then
        echo "The files is already  exists "
    else
        mkdir -p  $path
    fi
    #APP_NAME=group-module-1.0-SNAPSHOT.jar
    #pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
	#if [ -n "${pid}" ]; then
	#kill -9 $pid
	#fi
    cp -f ${WORKSPACE}/group-module/target/group-module-1.0-SNAPSHOT.jar $path && cp -f ${WORKSPACE}/group-module/target/group-module-1.0-SNAPSHOT.jar /opt/group-module/  #将打包好的war包备份到相应目录,覆盖已存在的目标
    #nohup java -jar /opt/group-module/group-module-1.0-SNAPSHOT.jar > /opt/group-module/group-module-1.0-SNAPSHOT.log 2>&1 &      
    echo "Completing!"
    ;;
  Rollback)
      echo "Status:$Status"
      echo "Version:$Version"
      cd /opt/bak/$Version #进入备份目录
      #APP_NAME=group-module-1.0-SNAPSHOT.jar
      #pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
	  #if [ -n "${pid}" ]; then
	  #kill -9 $pid
	  #fi
      cp -f group-module-1.0-SNAPSHOT.jar /opt/group-module/ #将备份拷贝到程序打包目录中,并覆盖之前的jar包
      #nohup java -jar /opt/group-module/group-module-1.0-SNAPSHOT.jar > /opt/group-module/group-module-1.0-SNAPSHOT.log 2>&1 &       
      ;;
  *)
  exit
      ;;
esac

由于我们经常更新代码,提交构建,使得备份目录日益变大,所以需要写一个脚本来删除老旧的版本,将版本控制在5个,再构建的地方新增一个shell

#!/bin/bash
ReservedNum=5  #保留文件数
FileDir=/opt/bak/
date=$(date "+%Y%m%d-%H%M%S")

cd $FileDir   #进入备份目录
FileNum=$(ls -l | grep '^d' | wc -l)   #当前有几个文件夹,即几个备份

while(( $FileNum > $ReservedNum))
do
    OldFile=$(ls -rt | head -1)         #获取最旧的那个备份文件夹
    echo  $date "Delete File:"$OldFile
    rm -rf $FileDir/$OldFile
    let "FileNum--"
done 

最后把我上边说的部署服务的脚本写在服务器上
新增shell

服务器脚本内容

APP_NAME=group-module-1.0-SNAPSHOT.jar

pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
if [ -n "${pid}" ]; then
kill -9 $pid
fi
BUILD_ID=DonTKILLME
nohup java -jar /opt/group-module/group-module-1.0-SNAPSHOT.jar > /opt/group-module/group-module-1.0-SNAPSHOT.log 2>&1 &
验证 Deploy

目前并没有进程

我们打开jenkins控制台,依次选择我们的部署方式,以及版本号,然后点击开始构建

查看控制台输出,这里已经部署成功,也可以看到状态时Deploy

到服务器上查看,进程已经起来了,日志显示启动成功

可以看下此次部署已备份至我们指定的目录,没有22的原因是,我当时构建22的时候回滚的是21

Rollback

我们再来到控制台,依次选择之后点击构建

看控制台我们,可以看出部署的方式,及回滚的版本

再来到服务器查看,发现进程号已经变了,说明回滚成功

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274082.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号