Jenkins实现CICD之Java基于Maven源码编译并部署应用
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
目录
一.gitlab仓库中准备Java代码
1 新建gitlab项目
如上图所示,我们可以新建项目,创建成功之后,如下图所示。
2 将代码推送到远程仓库
(1)从Gitee下载源代码
[root@ubuntu11.yinzhengjie.com ~]# git clone https://gitee.com/jasonyin2020/java-demo.git
Cloning into 'java-demo'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 19 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), done.
Resolving deltas: 100% (2/2), done.
[root@ubuntu11.yinzhengjie.com ~]#
(2)将代码推送到gitlab
[root@ubuntu11.yinzhengjie.com ~]# cd java-demo/
[root@ubuntu11.yinzhengjie.com java-demo]#
[root@ubuntu11.yinzhengjie.com java-demo]# git config --global user.name "root"
[root@ubuntu11.yinzhengjie.com java-demo]# git config --global user.email "y1053419035@qq.com"
[root@ubuntu11.yinzhengjie.com java-demo]#
[root@ubuntu11.yinzhengjie.com java-demo]# git remote rename origin old-origin
Renaming remote references: 100% (3/3), done.
[root@ubuntu11.yinzhengjie.com java-demo]#
[root@ubuntu11.yinzhengjie.com java-demo]# git remote add origin https://www.yinzhengjie.com/dev/java-demo.git
[root@ubuntu11.yinzhengjie.com java-demo]#
[root@ubuntu11.yinzhengjie.com java-demo]# git push -u origin --all
Username for 'https://www.yinzhengjie.com': root
Password for 'https://root@www.yinzhengjie.com':
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 2 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (19/19), 2.58 KiB | 2.58 MiB/s, done.
Total 19 (delta 2), reused 19 (delta 2), pack-reused 0
To https://www.yinzhengjie.com/dev/java-demo.git
* [new branch] master -> master
branch 'master' set up to track 'origin/master'.
[root@ubuntu11.yinzhengjie.com java-demo]#
[root@ubuntu11.yinzhengjie.com java-demo]# git push -u origin --tags
Username for 'https://www.yinzhengjie.com': root
Password for 'https://root@www.yinzhengjie.com':
Everything up-to-date
[root@ubuntu11.yinzhengjie.com java-demo]#
3 查看gitlab的webUI
如上图所示。
二.安装2台Tomcat服务并配置管理账号
1 10.0.0.13节点安装tomcat
(1)安装tomcat
root@ubuntu13:~# apt -y install tomcat9 tomcat9-admin
(2)查看JDK版本
root@ubuntu13:~# java -version # 注意哟,会自动安装JDK环境哟~
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu220.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu220.04, mixed mode, sharing)
root@ubuntu13:~#
(3)访问tomcat的webui
如上图所示。
2 10.0.0.13节点修改tomcat的配置
(1)拷贝tomcat9-admin的文件拷贝到tomcat的数据目录下
root@ubuntu13:~# ll /var/lib/tomcat9/webapps/
total 12
drwxrwxr-x 3 tomcat tomcat 4096 Feb 19 22:11 ./
drwxr-xr-x 5 root root 4096 Feb 19 22:11 ../
drwxr-xr-x 3 root root 4096 Feb 19 22:11 ROOT/
root@ubuntu13:~#
root@ubuntu13:~# cp -r /usr/share/tomcat9-admin/* /var/lib/tomcat9/webapps/
root@ubuntu13:~#
root@ubuntu13:~# ll /var/lib/tomcat9/webapps/
total 20
drwxrwxr-x 5 tomcat tomcat 4096 Feb 19 23:01 ./
drwxr-xr-x 5 root root 4096 Feb 19 22:11 ../
drwxr-xr-x 5 root root 4096 Feb 19 23:01 host-manager/
drwxr-xr-x 5 root root 4096 Feb 19 23:01 manager/
drwxr-xr-x 3 root root 4096 Feb 19 22:11 ROOT/
root@ubuntu13:~#
(2)创建用户和授权,如上图所示,仅需添加3行即可。
# vim /var/lib/tomcat9/conf/tomcat-users.xml
...
<!--仅需添加如下3行即可完成授权 -->
<role rolename="manager-gui"/>
<role rolename="manager-script" />
<user username="tomcat" password="yinzhengjie" roles="manager-gui,manager-script"/>
</tomcat-users>
(3)配置远程连接权限
# vim /var/lib/tomcat9/webapps/manager/META-INF/context.xml
...
<!-- 注释如下的内容,默认仅允许本机链接,注释后,所有节点都可以链接哟~ -->
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
3 10.0.0.13节点重启tomcat使得配置生效
(1)重启服务使得配置生效
root@ubuntu13:~# systemctl restart tomcat9
(2)登录tomcat后台管理界面
如上图所示,点击后就可以登录tomcat,用户名密码使我们上一步配置文件配置的。
用户名: tomcat ,密码: yinzhengjie。
(3)登录成功
如下图所示。
4 10.0.0.14安装tomcat服务
(1)另一个节点安装tomcat服务
root@web14:~# apt -y install tomcat9 tomcat9-admin
(2)拷贝tomcat9-admin的文件拷贝到tomcat的数据目录下
root@web14:~# cp -r /usr/share/tomcat9-admin/* /var/lib/tomcat9/webapps/
5 将10.0.0.13的配置拷贝到10.0.0.14节点
(1)将用户和授权的配置文件也拷贝过去
root@ubuntu13:~# scp /var/lib/tomcat9/conf/tomcat-users.xml 10.0.0.14:/var/lib/tomcat9/conf/tomcat-users.xml
(2)将远程连接权限的配置文件也拷贝过去。
root@ubuntu13:~# scp /var/lib/tomcat9/webapps/manager/META-INF/context.xml 10.0.0.14:/var/lib/tomcat9/webapps/manager/META-INF/context.xml
温馨提示:
我们也可以手动配置10.0.0.14节点,但是由于10.0.0.13的配置是正确也得到了验证,没必要在手动做一次。
6 10.0.0.14测试服务是否正常
(1)重启服务使得配置生效
root@web14:~# systemctl restart tomcat9
(2)验证tomcat是否正常
如上图所示,2个tomcat服务都是正常工作的。
三.手动部署Java应用到tomcat服务(用于测试)
1 开发机安装maven环境
(1)在开发机上安装maven环境
[root@ubuntu11.yinzhengjie.com hello-world]# apt -y install maven
(2)查看maven版本
[root@ubuntu11.yinzhengjie.com hello-world]# mvn --version
2 配置maven的镜像加速
[root@ubuntu11.yinzhengjie.com hello-world]# vim /etc/maven/settings.xml
...
<mirrors>
<!-- 在mirrors标签内部添加如下内容即可。 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
参考链接:
https://developer.aliyun.com/mvn/guide
3 编译前目录查看
[root@ubuntu11.yinzhengjie.com hello-world]# tree
.
├── dist
│ └── hello-world.war
├── pom.xml
├── README.md
└── src
└── main
└── webapp
├── index.jsp
└── WEB-INF
└── web.xml
5 directories, 5 files
[root@ubuntu11.yinzhengjie.com hello-world]#
3 编译Java应用
(1)忽略maven的检测过程
[root@ubuntu11.yinzhengjie.com hello-world]# mvn clean package -Dmaven.test.skip=true -e
(2)编译成功
如上图所示。
4 编译后目录查看
[root@ubuntu11.yinzhengjie.com hello-world]# tree
.
├── dist
│ └── hello-world.war
├── pom.xml
├── README.md
├── src
│ └── main
│ └── webapp
│ ├── index.jsp
│ └── WEB-INF
│ └── web.xml
└── target
├── hello-world-v0.1
│ ├── index.jsp
│ ├── META-INF
│ └── WEB-INF
│ ├── classes
│ └── web.xml
├── hello-world-v0.1.war
└── maven-archiver
└── pom.properties
11 directories, 9 files
[root@ubuntu11.yinzhengjie.com hello-world]#
5 将编译后的war包拷贝tomcat
(1)将war包拷贝到tomcat服务器
[root@ubuntu11.yinzhengjie.com hello-world]# scp target/yinzhengjie-hello-world-v0.1.war 10.0.0.13:/var/lib/tomcat9/webapps/hello.war
(2)查看tomcat的目录会自动解压
如下图所示。
6 访问Java项目
(1)如上图所示,直接访问即可。
http://10.0.0.13:8080/hello/
7 测试完毕后将后端代码清楚
root@ubuntu13:~# rm -rf /var/lib/tomcat9/webapps/hello*
温馨提示:
如上图所示,删除测试代码后,我们接下来使用Jenkins部署Java应用到tomcat服务
四.使用Jenkins部署Java应用到tomcat服务
1 Jenkins安装maven和Tomcat插件
1.1 安装maven的编译插件
如上图所示,我们可以安装maven集成的插件。"Maven Integration"插件可以让Jenkins实现maven风格的任务。
1.2 安装tomcat的插件
如上图所示,"Deploy to container"插件实现连接tomcat使用,其实tomcat类似于一个容器,里面放的是war包,会自动解压并加载。
2 Jenkins服务器上安装maven和配置镜像加速
2.1 安装maven
[root@ubuntu12.yinzhengjie.com ~]# apt -y install maven
2.2 配置maven加速
[root@ubuntu12.yinzhengjie.com ~]# vim /etc/maven/settings.xml
...
<mirrors>
...
<!-- 在mirrors标签内部添加如下内容即可。 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
参考链接:
https://developer.aliyun.com/mvn/guide
2.3 查看mvn和jdk相关路径
如上图所示,此处我们先查看maven和jdk的路径,便于后续配置Jenkins时使用。
[root@ubuntu12.yinzhengjie.com ~]# mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-139-generic", arch: "amd64", family: "unix"
[root@ubuntu12.yinzhengjie.com ~]#
值得注意的时,上面的并非jdk目录,而是jre目录,因此需要咱们单独安装jdk环境哟。
[root@ubuntu12.yinzhengjie.com ~]# apt -y install openjdk-11-jdk-headless
温馨提示:
如下图所示,如果安装jdk成功后,不难发现bin目录下是存在javac这个编译器的哟。
3 Jenkins全局工具配置jdk和maven
3.1 全局工具配置
如上图所示,进入到全局工具配置界面。
3.2 Jenkins配置JAVA_HOME环境
如上图所示,点击"新增 JDK",而后配置JDK的别名和JAVA_HOME环境。
值得注意的是,如果有多个JDK版本可以使用别名来标识哟~若不配置路径,则系统默认会从互联网下载较新版本哟~
3.3 Jenkins配置maven环境
如上图所示,点击"新增 Maven",配置名称和MAVEN_HOME变量。
4 创建Tomcat的全局凭据
4.1 进入到Jenkins的管理凭证界面
如上图所示,依次点击"系统管理","Manage Credentials"就可以进入到全局管理凭证啦。
如下图所示,点击"System"就可以进入到全局管理凭证界面啦。
4.2 进入添加凭证界面
如上图所示,点击"全局凭据"就可以看到如下图所示的界面,我们可以点击"Add Credentials"来添加凭据。
4.3 根据tomcat的用户权限设置,创建Jenkins连接tomcat的用户和权限
如上图所示,我们根据tomcat的配置,在Jenkins上填写与其对应的用户名和密码即可。
如下图所示,凭据添加成功啦。
5 创建maven风格的任务
5.1 新建项目
如上图所示,点击"新建任务",进入到如下图所示的界面,按照步骤操作即可。
5.2 配置源码管理
如上图所示,配置源码管理,此处我直接基于ssh协议拉去代码,如果想要使用https协议拉取代码,私有仓库可能需要配置用户凭据哟。
5.3 指定构建参数
如上图所示,配置"Build"的编译参数。不需要加"mvn"命令后,只需要加选项即可。
5.4 设置编译后的动作(Post Steps)
如上图所示,我们可以设置在任务执行后是否执行其他操作。比如任务执行成功执行哪些动作等等。
如下图所示,我们将编译后的war包进行更名,更名后方便将来移动到tomcat时就不需要更名啦~
5.5 配置构建后操作
如上图所示,设置好war包文件,并选择tomcat9的实例来部署war项目。
如下图所示,我们成功配置tomcat的连接信息及IP地址相关信息,点击"保存"即可。
6 构建验证
6.1 立即构建
如上图所示,点击立即构建就可以弹出如下图所示的界面,点击"控制台"输出。
6.2 查看构建信息
如上图所示,等待构建完成后,访问Java项目。如下图所示。
6.3 修改代码再次构建验证
6.3.1 修改java代码
如上图所示,修改副本代码。
如下图所示,将其提交到gitlab仓库。
# git commit -am 'v2.0'
# git push origin master
6.3.2 再次部署
如上图所示,在Jenkins中再次构建后就能部署成功啦!
7 添加参数化构建
7.1 添加一个git参数
如上图所示,我们可以添加一个名为COMMIT_ID的git参数变量。其中的配置要参考上图选择哟~
7.2 指定分支变量
如上图所示,此处要引用咱们自己定义的git参数变量哟~
7.3 基于commit id部署案例
如上图所示,我们可以基于参数化构建选择相应的commit id即可完成部署哟~
当然,如果有需要的话,也可以基于标签进行部署哈!具体配置可参考我之前的笔记哟~
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/18603742,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。