java程序UAT的部署

UAT预发布环境

环境准备

apache-maven-3.6.2
apache-tomcat-8.5.50
jdk1.8.0_181

/etc/profile

export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

假设从jenkins得到的war包和jar包,放到了/app
https://github.com/efsavage/hello-world-war/blob/master/dist/hello-world.war

image.png

配置部署

基本认识
.jar 包的文件可直接用 java -jar .jar包名可直接运行 .jar包文件
.war 包需要将文件放入tomcat下的webapps目录下,并且配置conf/server.xml文件才能自动解压运行
具体添加如下:

  

而后启动tomcat就能运行文件,访问IP:9090/hello 得到.war包的程序

java程序UAT的部署_第1张图片
image.png

jenkins流水线脚本

#!/bin/bash

PROJECT_NAME=$1
SERVICE_STATUS=$2
PUBLISH_TYPE=$3
PACKAGE_VERSION=$4
ROLLBACK_VERSION=$5

#创建打包目录
mkdir /data/nfs/maven-package

cd /data/nfs/maven-package

#拉取项目代码
git clone [email protected]:roucute/${PROJECT_NAME}.git

#maven打包
mvn clean package -Dmaven.test.skip=true

#判断打包的时jar包还是war包,同时将包名该为项目名加版本号
if [ -f '/data/nfs/maven-package/target/*.jar' ]; then
    cp -rp /data/nfs/maven-package/target/*.jar /java-app-package/${PROJECT_NAME}/${PACKAGE_VERSION}.jar
else
    cp -rp /data/nfs/maven-package/target/*.war /java-app-package/${PROJECT_NAME}/${PACKAGE_VERSION}.war
fi

#指定发布方式
if [ ${PUBLISH_TYPE} == publish ]; then
    ansible -i dev-hosts  -m copy -a 'src=/java-app-package/${PROJECT_NAME}/${PACKAGE_VERSION}.[jw]ar dest=/app'
elif [ ${PUBLISH_TYPE} == reback_one ]; then
    REBACK=$(ls /java-app-package/${PROJECT_NAME}/ | sort -n |tail -2|head -1)
    ansible -i dev-hosts  -m copy -a 'src=/java-app-package/${PROJECT_NAME}/${REBACK}.[jw]ar dest=/app'
else
    REBACK=$(ls /java-app-package/${PROJECT_NAME}/ | sort -n |tail -3|head -1)
    ansible -i dev-hosts  -m copy -a 'src=/java-app-package/${PROJECT_NAME}/${REBACK}.[jw]ar dest=/app'
fi

#指定版本回退
if [ ! -z ${ROLLBACK_VERSION} ]; then
    ansible -i dev-hosts  -m copy -a 'src=/java-app-package/${PROJECT_NAME}/${ROLLBACK_VERSION}.[jw]ar dest=/app'
fi

实现自动化部署项目的脚本

#!/bin/bash
#传入项目名
PROJECT_NAME=$1
#获取应用网页状态码
curl -I `hostname -i`:9090/${PROJECT_NAME}/ > /root/a.txt
#导入配置文件
conf="  "
#导入配置文件的位置
let location=$(cat /usr/local/tomcat-8.5/conf/server.xml |wc -l )-4

cp /app/*.[jw]ar /usr/local/tomcat-8.5/webapps/      
#将包移动到tomcat目录下
sed -ri "${location}i ${conf}" /usr/local/tomcat-8.5/conf/server.xml  
#添加配置文件以启动app
sh /usr/local/tomcat-8.5/bin/startup.sh             
#启动tomcat

#检查端口
if [ $(ss -ntal |grep 9090|awk -F':::' '{print$2}') -eq 9090 ];then
  echo "tomcat的9090端口已经成功启动拉!"
else 
  echo "tomcat的9090端口未能成功启动"
fi
#读取状态码文件
while read line
do
  if [ $(grep -o 200 /root/a.txt) -eq 200 ];then
    echo "应用访问成功"
  else
    echo "应用访问失败"
  fi
uniq -d
done
java程序UAT的部署_第2张图片
image.png

而后我们执行ansible命令来执行这个脚本就能部署到生产环境了,或者直接在命令里改成ansible的命令

此过程最大的难点就是配置文件加入的位置,与动态变化的应用路由,如果是同一个应用的更新,配置文件会一直重叠下去,可能会导致路由混乱,再有就是配置文件在预生产环境下可以这样做,生产环境则不行,生产环境可以在gitlab上建一个配置文件仓库,一旦配置文件更新,就参数构建触发更新,将这个新的配置文件覆盖过去,替换旧的文件,但这样做其实也有风险,修改配置文件的人员必须修改正确!

你可能感兴趣的:(java程序UAT的部署)