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

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

文章目录

  • Maven安装部署
  • Maven常用命令
  • Jenkins集成Maven
    • 一、创建Jenkins项目
    • 二、手动跑通项目
    • 三、编写构建步骤

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创建一个新的项目,将代码提交至此处

【运维知识高级篇】一篇文章带你搞懂Maven项目编译!(集成Jenkins+打包Java项目)_第1张图片
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界面,显示项目代码文件,再次复制项目地址

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

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

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

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

对该项目做一些配置

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

添加源码源

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

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

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

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

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

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

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

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

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

二、手动跑通项目

先手动跑通项目部署,在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,成功显示了界面

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

三、编写构建步骤

编写构建步骤,实现提交代码到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"

【运维知识高级篇】一篇文章带你搞懂Maven项目编译!(集成Jenkins+打包Java项目)_第11张图片
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

【运维知识高级篇】一篇文章带你搞懂Maven项目编译!(集成Jenkins+打包Java项目)_第12张图片
3、配置构建触发器

复制钩子地址

【运维知识高级篇】一篇文章带你搞懂Maven项目编译!(集成Jenkins+打包Java项目)_第13张图片
勾选好配置,填写好分支

【运维知识高级篇】一篇文章带你搞懂Maven项目编译!(集成Jenkins+打包Java项目)_第14张图片
生成token

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

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

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

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

[root@Gitlab hello-world-war]# cat src/main/webapp/index.jsp


Hello World!


	

Hello World! v5.0

It is now <%= new java.util.Date() %>

You are coming from <%= request.getRemoteAddr() %>

[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项目编译!(集成Jenkins+打包Java项目)_第17张图片


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

你可能感兴趣的:(运维知识分享,#,高级运维知识,运维,java,maven,maven编译,jenkins,tomcat,ci/cd)