1.Java项目部署概述
1.什么是Java项目?
简单来说就是使用Java编写的代码,我们称为Java项目。
2.为什么Java项目需要maven编译?
由于Java编写的代码是无法直接在服务器上运行,需要使用maven工具进行打包。
简单理解:Java源代码就像汽车的一堆散件,必须组装才是一辆完整的汽车。这里的组装汽车可以理解是Maven编译的过程。
3.实现自动化构建Java像目前,线实现手动构建Java项目?
为什么,首先大家对Java项目不熟悉,首次要想实现自动化发布代码,必须会手动。
所以我们先拿到一个源码>然后提交到gitlab>使用mvn手动构建>最后推送war至Tomcat发布。(一个完整的发布流程)
手动部署
1.创建git项目-提交代码(简略)
git init git remote add origin git@gitlab.precious.com:/devops/hello-world.git git add . git commit -m "xxx" git push -u origin master
2.手动获取代码,然后使用maven进行编译?
1.由于maven编译工具需要依赖Java,所以需要先安装jdk
yum install java -y
2.安装maven编译工具
yum install maven -y # 如果需要安装高版本maven,按如下操作 #1.下载maven wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/apache-maven-3.6.0-bin.tar.gz #2.安装maven tar xf apache-maven-3.6.0-bin.tar.gz mv apache-maven-3.6.0-bin /usr/local/ ln -s /usr/local/apache-maven-3.6.0-bin/ /usr/local/maven /usr/local/maven/bin/mvn -v #3.配置环境变量 echo "export PATH=/usr/local/apache-maven-3.6.0-bin/bin/:$PATH" >>/etc/profile source /etc/profile mvn -v
3.克隆gitlab代码,然后手动编译成war包
编译完成后,会生成target目录存放war包
git clone git@gitlab.precious.com:devops/hello-world.git cd hello-world
mvn package -Dmaven.test.skip=true # 跳过测试用例
配置maven的依赖jar包下载地址
PS:Java项目在编译过程中,许哟啊安装很多依赖,依赖都会上maven 官方下载。如果项目依赖的jar包较多,网络较差,那可能需要很久的时间。
PS:建议将下载的地址调整为阿里云,具体操作如下:
# 查看下maven安装位置下的/conf/settings.xml [root@dev java-hello-web]# vim settings.xml # 在159行左右添加如下内容 <mirror> <id>alimaven</id> <name>aliyum maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <mirrorOf>central</mirrorOF> </mirror>
4.将编译后的war批量推送至Tomcat集群,然后重启Tomcat
# 创建备份目录 mkdir /data/back -p # 打包项目目录下的文件 tar czf tomcat-web-$(date +%Y-%m-%d-%H-%s).tar.gz /usr/local/tomcat/webapps/ROOT/* # 备份 mv /usr/local/tomcat/webapps/ROOT/tomcat-web-$(date +%Y-%m-%d-%H-%s).tar.gz /data/back/ # 删除项目目录 rm -rf /usr/local/tomcat/webapps/ROOT/ # 将maven编译好的war包推送到tomcat并命名为ROOT.war 因为war包会自动解压生成ROOT目录,所以删除ROOT目录 for i in {7..8};do scp targget/hello-world-war-1.0.0.war root@10.0.0.$i:/usr/local/tomcat/webapps/ROOT.war; done # 重启tomcat服务 /usr/local/tomcat/bin/ shutdown.sh && /usr/local/tomcat/bin/startup.sh
Jenkins半自动部署
1.Jenkins集成maven插件(详细步骤请查阅Jenkins集成maven插件文章)
安装maven插件,这样才能创建maven 项目
Maven lntegration
package -Dmaven.test.skip=true
2.编写shell脚本将war包推送到tomcat集群
[root@localhost sh]# vim java_web_update.sh #!/bin/bash DATE=$(date +%Y-%m-%d-%H-%s) web_server="10.0.0.7 10.0.0.8" Sdir=/opt Ddir=/code Hdir=/usr/local/tomcat/webapps Name=${DATE}-${git_version} #1.进入gitlab项目目录,将内容进行打包 get_code(){ #cd /root/.jenkins/workspace/freestyle && #tar czf $Sdir/web-${DATE}.tar.gz ./* #cd ${WORKSPACE_TMP} cd ${WORKSPACE} } #2.将内容通过scp拷贝至web集群组 (提前做好免密钥) scp_web_server(){ for i in $web_server do scp -r target/*.war root@$i:/opt/ROOT-${Ddir}/ROOT-${Name} ssh root@$i "mkdir -p ${Ddir}/ROOT-${Name} && upzip /opt/ROOT-${Ddir}/ROOT-${Name} && rm -rf ${Ddir}/ROOT && ln -s ${Ddir}/ROOT-${Name} $ {Ddir}/ROOT &&
/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh"
done }
# 回退 back(){
back_file=$(ssh root@$i "find ${Ddir} -maxdepth 1 -type d -name "ROOT-*-${git_version}"")
for hosts in $WebServer
do
ssh root@${hosts} "rm -rf ${Ddir}/ROOT &&
ln -s ${Ddir}/ROOT-${DATE}-${git_version} ${Ddir}/ROOT &&
/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh"
done
} deploy(){ get_code scp_web_server }
# 判断该版本是否已部署过
if [ $deploy_env == "deploy" ];then
if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
echo "你已经部署过该版本 ${git_version} 版本"
exit
else
deploy
fi
elif [ $deploy_env == "rollback" ];then
back
fi
[root@localhost sh]# chmod +x /data/sh/java_web_update.sh [root@localhost sh]# ll total 4 -rwxr-xr-x. 1 root root 647 Dec 11 10:16 java_web_update.sh