Jenkins发布Java项目

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

原文地址:https://www.cnblogs.com/fengyuanfei/p/14495091.html