【运维知识高级篇】一篇文章带你搞懂Maven项目编译!(集成Jenkins+打包Java项目)

本篇文章给大家介绍涉及Maven的项目编译,Maven是一个项目管理和综合工具,提供给开发人员一个完整的生命周期框架,开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。它是Apache的一个开源项目,主要服务于JAVA平台的构建,依赖管理,项目管理。

Maven安装部署

1、在官网或者镜像源下载Maven 3的安装包
官网:http://maven.apache.org/download.cgi
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/

2、安装Maven
下面版本的下载连接放到文末。

[root@Jenkins ~]# tar xf apache-maven-3.3.9-bin.tar.gz 
[root@Jenkins ~]# mv apache-maven-3.3.9 /usr/local/
[root@Jenkins ~]# ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven
[root@Jenkins ~]# /usr/local/maven/bin/mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_181-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

3、编辑/etc/profile文件,在末尾添加PATH变量

[root@Jenkins ~]# cat /etc/profile
...
export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH
[root@Jenkins ~]# source /etc/profile
[root@Jenkins ~]# mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_181-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

Maven常用命令

mvn -v  查看版本号
validate(验证):  验证项目正确,并且所有必要信息可用。
compile(编译): 编译项目源码
test(测试): 使用合适的单元测试框架测试编译后的源码。
package(打包): 源码编译之后,使用合适的格式(例如JAR格式)对编译后的源码进行打包。
integration-test(集成测试): 如果有需要,把包处理并部署到可以运行集成测试的环境中去。
verify(验证): 进行各种测试来验证包是否有效并且符合质量标准。
install(安装): 把包安装到本地仓库,使该包可以作为其他本地项目的依赖。
deploy(部署): 在集成或发布环境中完成,将最终软件包复制到远程存储库,以与其他开发人员和项目共享。
mvn clean (清除) : 清除上次编译的结果
mvn package -Dmaven.test.skip=true 跳过测试用例
mvn package      #会去maven的中央仓库去下载需要的依赖包和插件到.m2目录下

Jenkins集成Maven

需求:上传一个简单的Java项目包hello-world.tar.gz进行解压,解压后,将代码推送到gitlab远程仓库,通过触发器触发Jenkins事件,Jenkins拉取代码到Jenkins服务器,用Maven执行打包命令。(项目包下载连接放到文末)

一、创建Jenkins项目

1、上传代码到gitlab

Project Object Model是项目对象模型,通过xml格式保存的pom.xml文件,该文件用于管理源代码,配置文件,开发者的信息和角色,问题追踪系统,组织信息,项目授权,项目的url,项目的依赖关系等等,该文件是由开发维护,运维人员可以不用关心。

[root@Gitlab ~]# rz -E
rz waiting to receive.
[root@Gitlab ~]# tar xf hello-world-war.tar.gz 
[root@Gitlab ~]# cd hello-world-war/
[root@Gitlab hello-world-war]# ls
dist  pom.xml  README.md  src
[root@Gitlab hello-world-war]# git remote 	# 查看与远程仓库的连接
origin
[root@Gitlab hello-world-war]# git remote remove origin  # 删除默认连接
[root@Gitlab hello-world-war]# git remote
[root@Gitlab hello-world-war]# 

2、我们在gitlab创建一个新的项目,将代码提交至此处

在这里插入图片描述
3、添加连接此项目的仓库信息,将代码推送至远程仓库

[root@Gitlab hello-world-war]# git remote add origin [email protected]:root/java.git
[root@Gitlab hello-world-war]# git remote -v
origin	[email protected]:root/java.git (fetch)
origin	[email protected]:root/java.git (push)
[root@Gitlab hello-world-war]# git push -u origin master
Counting objects: 37, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (24/24), done.
Writing objects: 100% (37/37), 4.48 KiB | 0 bytes/s, done.
Total 37 (delta 8), reused 0 (delta 0)
To [email protected]:root/java.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

4、刷新gitlab的web界面,显示项目代码文件,再次复制项目地址

在这里插入图片描述

5、在Jenkins中新建一个maven项目,去拉取gitlab代码

该项目相较于自由风格项目多了一个编译过程

在这里插入图片描述

对该项目做一些配置

在这里插入图片描述

添加源码源

在这里插入图片描述

在build处可以看到有报错信息,显示需要配置maven的一些东西,点击蓝色位置,右键打开新的标签页

在这里插入图片描述

在新的标签页下滑添加一下Maven的家目录

在这里插入图片描述

此时我们的build处仍然显示报错,原因是没有刷新,没关系,我们填写Goals and options的内容,clean package 先清除再打包。

在这里插入图片描述

退出再次进入就不显示报错了

在这里插入图片描述

二、手动跑通项目

先手动跑通项目部署,在Jenkins上手动上传项目,将项目通过Maven打包后,将代码部署到web服务器。
1、手动上传项目到Jenkins服务端

[root@Jenkins ~]# cd hello-world-war/
[root@Jenkins hello-world-war]# ls
dist  pom.xml  README.md  src
[root@Jenkins hello-world-war]# mvn package	# 打包项目
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:41 min
[INFO] Finished at: 2023-08-20T18:18:48+08:00
[INFO] Final Memory: 14M/261M
[INFO] ------------------------------------------------------------------------

2、将打包好的war包推送到web端指定位置
打包项目成功后,发现多了target目录,目录下面有hello-world-war-1.0.0.war(如果是执行clean会清除target目录)

[root@Jenkins hello-world-war]# ls
dist  pom.xml  README.md  src  target
[root@Jenkins hello-world-war]# ls target/
hello-world-war-1.0.0      maven-archiver
hello-world-war-1.0.0.war

3、推送war包至web服务器的tomcat代码目录

[root@Web01 ~]# ls /soft/tomcat/webapps/ROOT/
asf-logo-wide.svg  bg-nav.png    index.jsp          tomcat.svg
bg-button.png      bg-upper.png  RELEASE-NOTES.txt  WEB-INF
bg-middle.png      favicon.ico   tomcat.css
[root@Web01 ~]# rm -rf /soft/tomcat/webapps/ROOT/*

[root@Jenkins hello-world-war]# scp target/hello-world-war-1.0.0.war 10.0.0.7:/soft/tomcat/webapps/ROOT/
hello-world-war-1.0.0.war    100% 2402     1.3MB/s   00:00 

[root@Web01 ~]# ls /soft/tomcat/webapps/ROOT/
hello-world-war-1.0.0.war
[root@Web01 ~]# cd /soft/tomcat/webapps/ROOT/
[root@Web01 ROOT]# unzip hello-world-war-1.0.0.war 
Archive:  hello-world-war-1.0.0.war
   creating: META-INF/
  inflating: META-INF/MANIFEST.MF    
   creating: WEB-INF/
   creating: WEB-INF/classes/
  inflating: WEB-INF/web.xml         
  inflating: index.jsp               
   creating: META-INF/maven/
   creating: META-INF/maven/com.efsavage/
   creating: META-INF/maven/com.efsavage/hello-world-war/
  inflating: META-INF/maven/com.efsavage/hello-world-war/pom.xml  
  inflating: META-INF/maven/com.efsavage/hello-world-war/pom.properties
[root@Web01 ROOT]# ls
hello-world-war-1.0.0.war  index.jsp  META-INF  WEB-INF

4、浏览器访问10.0.0.7:8080,成功显示了界面

在这里插入图片描述

三、编写构建步骤

编写构建步骤,实现提交代码到gitlab,自动触发Jenkins事件,Jenkins通过Maven打包后,将代码部署到web服务器。

我们上面创建了Jenkins的项目,还没有写构建步骤,只是写了clean和package,此时我们点击立即构建,会生成出target的目录,也就是说执行了从gitlab拉取代码再在Jenkins上执行的maven编译过程。

[root@Jenkins ~]# ls /var/lib/jenkins/workspace/
freestyle-job  git_version  java-job
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/java-job/
dist  pom.xml  README.md  src  target

但是这样还不够,我们构建项目要实现的是自动部署到web服务器上,所以我们增加构建步骤。

1、增加构建步骤

此处可以选择直接把代码写在里面,也可以选择把这些代码放到脚本里面,在此处只写一个执行脚本即可。

ssh 10.0.0.7 "cd /soft/apache-tomcat-9.0.73/webapps/ && mkdir java_$BUILD_ID"
scp target/*.war 10.0.0.7:/soft/apache-tomcat-9.0.73/webapps/java_$BUILD_ID
ssh 10.0.0.7 "cd /soft/apache-tomcat-9.0.73/webapps/java_$BUILD_ID && unzip *.war && rm -rf *.war"
ssh 10.0.0.7 "cd /soft/apache-tomcat-9.0.73/webapps/ && rm -rf ROOT && ln -s java_$BUILD_ID ROOT"
ssh 10.0.0.7 "/soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh"

在这里插入图片描述
2、点击立即构建

[root@Web01 webapps]# ll
total 4
drwxr-x--- 16 root root 4096 Aug 20 19:18 docs
drwxr-x---  7 root root   99 Aug 20 19:18 examples
drwxr-x---  6 root root   79 Aug 20 19:18 host-manager
drwxr-xr-x  2 root root   39 Aug 20 19:34 java_2
drwxr-xr-x  4 root root   54 Aug 20 19:37 java_3
drwxr-x---  6 root root  114 Aug 20 19:18 manager
lrwxrwxrwx  1 root root    6 Aug 20 19:37 ROOT -> java_3
[root@Web01 webapps]# ls ROOT/
index.jsp  META-INF  WEB-INF

浏览器访问也可以成功访问,此时我们注意是v4.0

在这里插入图片描述
3、配置构建触发器

复制钩子地址

在这里插入图片描述
勾选好配置,填写好分支

在这里插入图片描述
生成token

在这里插入图片描述

将钩子的URL和生成的token,复制到gitlab的项目的设置下的集成页面,点击增加Web钩子

在这里插入图片描述

4、在gitlab修改代码,提交到Jenkins进行测试

[root@Gitlab hello-world-war]# cat src/main/webapp/index.jsp
<html>
<head>
<title>Hello World!</title>
</head>
<body>
	<h1>Hello World! v5.0</h1>
	<p>
		It is now
		<%= new java.util.Date() %></p>
	<p>
		You are coming from 
		<%= request.getRemoteAddr()  %></p>
</body>
[root@Gitlab hello-world-war]# git commit -am "v2.0"
[master 8541df7] v2.0
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@Gitlab hello-world-war]# git push -u origin master
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 433 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To [email protected]:root/java.git
   b0b92ed..8541df7  master -> master
Branch master set up to track remote branch master from origin.

自动触发Jenkins事件,Jenkins完成使用Maven编译代码,推送到Web服务器的操作,此时我们刷新浏览器,发现版本已经发生了变化。

在这里插入图片描述


Maven安装包下载链接:https://pan.baidu.com/s/1HPUaEHzaqLV4fk9VvySAew?pwd=im0w
Java项目包下载链接:https://pan.baidu.com/s/1Poll1N7R1O2jz7_RRkAjXg?pwd=wja5
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

猜你喜欢

转载自blog.csdn.net/qq_37510195/article/details/132393403
今日推荐