一.简介

下载java源代码上传到gitlab仓库中
通过jenkins拉取java源代码,通过maven对代码进行编译,然后生成war包
通过jenkins分发到web服务器,然后部署

代码上线之java代码上线 maven自动编译_代码上线

二.hello-word项目示例

0.gilab新建一个项目hello-word-war

代码上线之java代码上线 maven自动编译_maven_02

1.gitee中搜索hello-word-war源码后下载

2.下载完成后解压,在hello-word-war目录下 鼠标右键Open Git Bash here,将源码推送到gitlab

代码上线之java代码上线 maven自动编译_java_03

#全局配置
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
#已有git仓库初始化
git init
#添加远程认证
#查看
git remote -v
#重命名或删除 git remote re origin
git remote rename origin old-origin
#添加新的远程地址
git remote add origin git@192.168.77.147:root/hello-word-war.git
#添加到缓存区、提交到本地仓库
git add .
git commit -m "v1.0"
#添加标签
git tag -a v1.0 -m "v1.0"
#推送到远程仓库
git push -u origin master
git push -u origin --tags

3.安装配置maven  与jenkins一台服务器

maven可对java源代码进行编译,源代码目录内有pom.xml文件,pom.xml记录代码依赖,war或jar的名字。项目上具体使用什么版本,根据要求安装即可。这里使用maven3.8.8,二进制包下载地址

#上传maven安装包到任意目录
rz apache-maven-3.8.8-bin.tar.gz
#解压
mkdir -p /app/tools
tar -xf apache-maven-3.8.8-bin.tar.gz -C /app/tools
#软链接
ln -s /app/tools/apache-maven-3.8.8/ /app/tools/maven
#配置环境变量
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
source /etc/profile
#版本查看
mvn --version
#修改maven源为国内源 在<mirrors>下一行加入,即写在<mirrors> 中间 </mirrors>
vim /app/tools/maven/conf/settings.xml
<mirror>
    <id>maven-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

也可手动打包,后续是maven自动编译war包(此步骤无需操作)

#切换到项目目录
cd java-hello-world-maven
#清除后创建war包或jar包
mvn clean package

4.jenkins拉取代码,通过maven编译war包

创建一个maven项目

代码上线之java代码上线 maven自动编译_maven_04

General---丢弃旧的构建(可选)

源码管理---Git 项目的仓库地址和认证  (认证已配置好)

代码上线之java代码上线 maven自动编译_代码上线_05

Build---Maven Version---the tool configuration---跳转到全局工具配置

代码上线之java代码上线 maven自动编译_maven_06

系统管理---全局工具配置---Maven安装---取消自动安装

代码上线之java代码上线 maven自动编译_代码上线_07

自定义name,添加MAVEN_HOME

代码上线之java代码上线 maven自动编译_maven_08

配置完成后,返回到Build---添加命令(默认package)  clean package

代码上线之java代码上线 maven自动编译_java_09

部署war包到web服务器   

#web服务器已部署好tomcat环境
#jenkins到web服务器的ssh免密已配置好

Post Steps---Run only if build succeeds---执行shell

代码上线之java代码上线 maven自动编译_java_10

代码上线之java代码上线 maven自动编译_maven_11

执行shell命令如下

#配置变量
file="hello-world-war-1.0.0.war"
tmp_file="`date +%s`_hello-world-war-1.0.0.war"
#web_server_list 可以参数化构建,可以设置多个IP
web_server_list="192.168.77.142"
#路径 当前路径默认$workspace下
src_dir=./target
dst_dir=/app/tools/tomcat/webapps
bak_dir=/tmp/`date +%s`_ROOT

#maven已打包,源码无需打包

#分发
distribute() {
for ip in ${web_server_list}
do
  scp ${src_dir}/${file} root@${ip}:/tmp/${tmp_file}
done
}
#部署
deploy() {
for ip in ${web_server_list}
do
   ssh root@${ip} " cd ${dst_dir} ;
      [ -d ${dst_dir}/ROOT ] && {
         mkdir -p ${bak_dir} ; 
	     mv ${dst_dir}/ROOT ${dst_dir}/ROOT.war  ${bak_dir} ;
	    } ;
      mv /tmp/${tmp_file} ${dst_dir}/ROOT.war ;
      systemctl stop tomcat ;
      systemctl stop tomcat ;
      systemctl start tomcat 
   "
done
}
#执行函数
distribute
deploy

立即构建---控制台输出

代码上线之java代码上线 maven自动编译_代码上线_12

控制台内容部分展示

代码上线之java代码上线 maven自动编译_代码上线_13

验证web  http://192.168.77.142:8080

代码上线之java代码上线 maven自动编译_java_14