Java项目部署概述
1.什么是Java项目
简单来说就是使用Java编写代码,我们将其称为java项目
2.java项目需要maven编译
由于java编写打代码是无法直接在服务器上运行的,需要使用maven工具进行打包.
简单理解:Java源代码就像汽车的一堆散件,必须组中才是一辆完整的汽车,这里的“组装汽车的过程”就可以理解是“Maven编译打包”的过程
3.实现自动化构建java项目前,先手动实现java项目
首先大家对java项目不熟悉,其次要想实现自动发布代码,必需先会手动
我们先模拟开发提交java源码-->推送至gitlab-->运维使用mvn手动编译-->最后推送至wat至web集群(完整的发布流程)
QQ图片20200619105550.png
Java项目部署
1.搭建java集群环境 ( Ansible | ⼿动 )
- 安装web集群的tomcat服务
- 安装nginx充当负载均衡,进⾏调度
环境部署
web节点
#tomcat集群配置(请关闭web集群上的nginx){7.8都要配}
[root@web01 ~ 11:08:55]# yum install java -y
[root@web01 ~ 11:11:09]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz #下载tomcat9版本的包
[root@web01 ~ 11:15:19]# mkdir /soft
[root@web01 ~ 11:15:27]# tar xf apache-tomcat-9.0.36.tar.gz -C /soft #将解压的文件放在/soft/中
[root@web01 ~ 11:15:51]# ln -s /soft/apache-tomcat-9.0.36/ /soft/tomcat
负载均衡
[root@lb01 ~ 11:07:59]# vim /etc/nginx/conf.d/tomcat.oldben.com.conf
upstream java {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
}
server {
listen 80;
server_name tomcat.oldben.com;
location / {
proxy_pass http://java;
include proxy_params;
}
}
[root@lb01 ~ 11:25:28]# nginx -t
[root@lb01 ~ 11:29:13]# systemctl reload nginx
#配置windowns的hosts劫持
10.0.0.5 tomcat.oldben.com
1.提交代码(开发人员)
1)在gitlab上创建一个java仓库

2)模拟开发本地提交代码至仓库
在windowns上进行代码推送
tar xf hello-world-war.tar.gz
cd hello-world-war
git remote -v #查看是否有远程仓库的地址
git remote remove origin #移除原有的远程仓库地址
git remote -v # 查看是否已经删除原有的远程仓库地址
git add .
git commit -m "java"
git remote add origin git@gitlab.oldben.com:dev/hellow-word-demo.git #在远程推送是先要添加远程仓库地址
git remote -v # 查看是否已经添加上远程仓库的地址
git push origin master #进行远程推送
2.手动发布代码(运维人员)
2.1)第一次需要先克隆项目(后期就直接git pull 就行)
2.2)安装maven工具,对源码包进行编译
2.3)通过scp将war包推送至tomcat指定的站点目录
2.4)重启集群的tomcat
#使用jenkins服务器。因为之前添加过公钥了
[root@jenkins ~ 10:19:28]# git clone git@gitlab.oldben.com:dev/hellow-word-demo.git
[root@jenkins ~ 12:09:03]# cd hellow-word-demo/
#打包
[root@jenkins ~/hellow-word-demo 12:10:15]# yum install maven -y #下载编译的软件
[root@jenkins ~/hellow-word-demo 12:14:36]# mvn package #通过mvn把当前目录下的所有打成war包 {配置完成后 mvn clean package }
[root@jenkins ~/hellow-word-demo 12:14:36]# mvn clean package
#它产生的war包在当前目录里产生一个target的里面
#清理站点目录
[root@jenkins ~/hellow-word-demo 12:30:15]# ssh root@172.16.1.7 "rm -rf /soft/tomcat/webapps/ROOT"
[root@jenkins ~/hellow-word-demo 12:31:01]# ssh root@172.16.1.8 "rm -rf /soft/tomcat/webapps/ROOT"
#推送war包至站点目录,并改名为ROOT.war
[root@jenkins ~/hellow-word-demo 12:31:35]# scp target/*.war root@172.16.1.7:/soft/tomcat/webapps/ROOT.war
[root@jenkins ~/hellow-word-demo 12:33:30]# scp target/*.war root@172.16.1.8:/soft/tomcat/webapps/ROOT.war
#重启tomcat
[root@jenkins ~/hellow-word-demo 12:33:36]# ssh root@172.16.1.7 "pkill java"
[root@jenkins ~/hellow-word-demo 12:36:00]# ssh root@172.16.1.8 "pkill java"
[root@jenkins ~/hellow-word-demo 12:33:36]# ssh root@172.16.1.7 "/soft/tomcat/bin/startup.sh"
[root@jenkins ~/hellow-word-demo 12:36:00]# ssh root@172.16.1.8 "/soft/tomcat/bin/startup.sh"
默认的Maven源为国外,下载速度非常慢,修改成阿里源可提高速度
https://www.cnblogs.com/kret12345/p/9572080.html
jenkins⾃动化发布:
( jenkins能拉取代码-->jenkins可以调⽤maven编译项⽬--->Shell拿到war包,发布到web集群。)






脚本
[root@jenkins ~ 15:00:32]# vim /scripts/java_deploy.sh
Date=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
Web_Name=ROOT-${Date}
Web_Dir=/opt
#打包
cd ${WORKSPACE} && \
for ip in ${Web_Server}
do
#推送数据包
scp -rp target/*.war root@$ip:${Web_Dir}/${Web_Name}.war
#登录集群节点解压
ssh root@${ip} "cd ${Web_Dir} && \
mkdir -p ${Web_Name} && \
unzip ${Web_Name}.war -d ${Web_Name} && \
rm -f ${Web_Name}.war && \
rm -rf /soft/tomcat/webapps/ROOT && \
ln -s ${Web_Dir}/${Web_Name} /soft/tomcat/webapps/ROOT && \
pkill java && \
/soft/tomcat/bin/startup.sh"
done
自动(构建触发器生成令牌)
http://jenkins.oldben.com:8080/project/hellow-word-java
8936ace1f61da9691e7ce9717a42b336
在jenkins 是上点点点


再配置gitlab
项目 --> 用户设置--> webhooks

测试
在gitlab上点或者代码更新

#更新代码的方式i测试
vim src/main/webapp/index.jsp
git add .
git commit -m "xiaobaoverynice"
git push origin master
进化到标签



编写脚本
[root@jenkins ~ 18:03:46]# vim /scripts/java_deploy_tag.sh
#!/usr/bin/bash
Date=$(date +%F-%H-%M)
Web_Server="172.16.1.7 172.16.1.8"
Web_Name=ROOT-${Date}-${git_version}
Web_Dir=/opt
#打包
cd ${WORKSPACE} && \
for ip in ${Web_Server}
do
#推送数据包
scp -rp target/*.war root@$ip:${Web_Dir}/${Web_Name}.war
#登录集群节点解压
ssh root@${ip} "cd ${Web_Dir} && \
mkdir -p ${Web_Name} && \
unzip ${Web_Name}.war -d ${Web_Name} && \
rm -f ${Web_Name}.war && \
rm -rf /soft/tomcat/webapps/ROOT && \
ln -s ${Web_Dir}/${Web_Name} /soft/tomcat/webapps/ROOT && \
pkill java && \
/soft/tomcat/bin/startup.sh"
done
充当开发人员提交各个版本的代码、提交
#发布1.1版本
vim src/main/webapp/index.jsp
git add .
git commit -m "oldben-v1.1"
git push origin master
git tag -a "v-1.1" -m "1.1"
git push origin --tags
#发布1.2版本
vim src/main/webapp/index.jsp
git add .
git commit -m "oldben-v1.2"
git push origin master
git tag -a "v-1.2" -m "1.2"
git push origin --tags
#发布1.3版本
vim src/main/webapp/index.jsp
git add .
git commit -m "oldben-v1.3"
git push origin master
git tag -a "v-1.3" -m "1.3"
git push origin --tags
再测试
基于tag标签进行回退
创建一个freestyle项目,来进行java的回退



脚本
[root@jenkins /opt 18:54:26]# vim /scripts/java_rollback.tag.sh
#!/usr/bin/bash
Tomcat_Dir=/soft/tomcat/webapps/ROOT
Web_Server="172.16.1.7 172.16.1.8"
Web_Dir=/opt
for ip in ${Web_Server}
do
ssh root@${ip} "[ -d ${Web_Dir}/ROOT-*-${git_version} ] && \
rm -f ${Tomcat_Dir} && \
ln -s ${Web_Dir}/ROOT-*-${git_version} ${Tomcat_Dir} && \
pkill java && \
/soft/tomcat/bin/startup.sh"
done
网友评论