Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署
目录
环境准备
导入项目包
配置jenkins
构建项目
配置项目上线
修改项目代码测试
环境准备
本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830
首先在node01主机中操作,本次操作需要java8的版本,将之前安装的java17卸载
Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/?er=221886#java8
#卸载之前17版本
[root@node01 ~]# yum remove -y java
#下载jdk8
[root@node01 ~]# wget -O jdk-8u411.rpm https://download.oracle.com/otn/java/jdk/8u411-b09/43d62d619be4e416215729597d70b8ac/jdk-8u411-linux-x64.rpm?AuthParam=1720715155_db3de5003585c6f38ce0b8e87c922e4b
[root@node01 ~]# yum install -y jdk-8u411.rpm[root@node01 ~]# java -version
java version "1.8.0_411"
Java(TM) SE Runtime Environment (build 1.8.0_411-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.411-b09, mixed mode)
Index of apache-local/tomcathttps://mirrors.huaweicloud.com/apache/tomcat/
#下载tomcat8
[root@node01 ~]# wget https://mirrors.huaweicloud.com/apache/tomcat/tomcat-8/v8.5.100/bin/apache-tomcat-8.5.100.tar.gz
[root@node01 ~]# tar -zxvf apache-tomcat-8.5.100.tar.gz
[root@node01 ~]# mv apache-tomcat-8.5.100 /usr/local/tomcat
修改tomcat配置
[root@node01 ~]# vim /usr/local/tomcat/webapps/docs/META-INF/context.xml
[root@node01 ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
[root@node01 ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
[root@node01 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml<role rolename="manager-gui"/><role rolename="manager-script"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="admin" password="123456" roles="tomcat,manager-gui,manager-script,admin-gui,admin-script"/>
记住这个用户名admin 密码123456 这里定义好了登录tomcat管理页面的账户
启动tomcat验证
[root@node01 ~]# /usr/local/tomcat/bin/startup.sh
导入项目包
来到gitlab服务主机的web页面,登录后导入项目
Git仓库URL
https://gitee.com/hyunze/easy-springmvc-maven
点击导入后等待一会即可完成
将jenkins服务主机的公钥复制,到gitlab平台里
[root@jenkins .ssh]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCxUu9J87S1IP7fKfcjbQGJe4KNpMbVz8NfRXibyzLprGwkdPcLZL0nQGKfHiUKroO/yehztlyya/eziwpJposnzkTcY2qbUDQHNoFaY0h1sRhvtJGjdZcwvgi0QHdbv4dp/YxthMx8+UtXmXaDyBrG1ezjcON2pRSnWpUSVL9HatbC6lnhn2q5U2U790ggt2JqjeCGpRQBgusS6Xq5D+HXZfPFvCJK71N3OEBqyuf5jysLMLdRQtawck/nCeU8sTQbHVl85+oPZ5FjuX++GBqTdCdZFcWMx/8qTNaux2ctJmW9Arx2h3SgESwIEsxE3+DhyoE+88FyNdtE752Ms0JWypNGW+XVoFVyFFd8luHTQSHKmN2kMZs1Qq+8XWZHz1LgD5fOvsiGyw2ei/dI1HrhZzyVG+YpkZFxAf3GyIC8YWeu7tvcbE8z83jI9XQYUSAWg6UE4ifkVy+7QB/Su0RK2Re3hIj7tvgYxV0WOVe0/+ZB/up576xnyemeWx2LBIc= root@jenkins
配置jenkins
来到jenkins主机的web页面,确保下载了这两个插件,没有则下载
Maven Integration plugin
Deploy to container Plugin
来到jenkins主机下载部署jdk8的版本,因为本项目打包需要用到jdk8
[root@jenkins ~]# wget -O jdk-8u411.rpm https://download.oracle.com/otn/java/jdk/8u421-b09/d8aa705069af427f9b83e66b34f5e380/jdk-8u421-linux-x64.rpm?AuthParam=1721458472_cbb2875b7eee184c7878c44b44975d71
[root@jenkins ~]# yum install -y jdk-8u411.rpm
安装目录在/usr/lib/jvm/jdk-1.8.0_421-oracle-x64
maven和git也已经预装过了在之前的环境里。
现在来到jenkins的web页面,修改java配置
构建项目
在gitlab页面复制仓库的连接,粘贴进jenkins的配置里。
回到jenkins页面
在jenkins主机工作空间中查看war包
[root@jenkins maven-project]# ll /root/.jenkins/workspace/maven-project
total 44
-rw-r----- 1 root root 35181 Jul 12 05:50 LICENSE
-rw-r----- 1 root root 99 Jul 12 05:50 README.md
-rw-r----- 1 root root 3062 Jul 12 06:27 pom.xml
drwxr-x--- 3 root root 18 Jul 12 05:50 src
drwxr-x--- 7 root root 148 Jul 12 06:38 target[root@jenkins maven-project]# ll target/
total 4680
drwxr-x--- 3 root root 20 Jul 12 06:32 classes
drwxr-x--- 4 root root 72 Jul 12 06:38 easy-springmvc-maven
-rw-r----- 1 root root 4788840 Jul 12 06:38 easy-springmvc-maven.war
drwxr-x--- 3 root root 25 Jul 12 06:06 generated-sources
drwxr-x--- 2 root root 28 Jul 12 06:38 maven-archiver
drwxr-x--- 3 root root 35 Jul 12 06:06 maven-status
这里面就已经有了打好的war包,就成功构建并打包了。
配置项目上线
来到jenkins的web页面,继续增加maven-project任务的配置
设置好后点立即构建,然后看到正确输出即可。
来到项目上线的主机,到tomcat管理页面查看
管理页面需要登录,安装时配置的tomcat的用户名和密码
这里就看到自动打包并上线的项目了。
这里使用的项目的用户名和密码,在其代理里定义的,用户名:admin 密码:admin 输入后登录即可。
修改项目代码测试
来到gitlab用户页面使用管理员用户登录,进修修改代码,并提交测试
刷新即可看到更改后的文字
回到jenkins页面,点击立即构建
来到tomcat页面查看,此时可以看到登录页标题发生了改变,即完成了一次构建,自动拉取,打包,上线。
相关文章:

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署
目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作,本次操作需要java8的版本,将之前安装的java17卸…...

Synchronized升级到重量级锁会发生什么?
我们从网上看到很多,升级到重量锁的时候不会降级,再来线程都是重量级锁 今天我们来实验一把真的是这样的吗 1.首选导入Java对象内存布局的工具库: <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-…...
【Webpack】HMR 热更新
HMR全称Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应用。 不使用热更新,我们在应用运行过程中修改了某个模块,通过自动刷新会导致整个…...

【计算机视觉】siamfc论文复现
什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置),来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中࿰…...

PotatoTool 蓝队版 V1.3 发布:增强功能和性能优化
一、简介 经过广大网友的反馈和建议,我们对V1.1版本中存在的问题进行了优化。其中,我们针对MD5库进行了本地化处理,以提高查询效率。然而,这也导致了软件体积的飙升。二、优化概述 1、兼容性 兼容arm架构系统 2、UI 2.1 界面…...

pytest常用命令行参数解析
简介:pytest作为一个成熟的测试框架,它提供了许多命令行参数来控制测试的运行方式,以配合适用于不同的测试场景。例如 -x 可以用于希望出现错误就停止,以便定位和分析问题。–rerunsnum适用于希望进行失败重跑等个性化测试策略。 …...
pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本
一、背景 通过pgsql的dump命令可以快速的做数据库表结构、表数据的备份,随着业务不断的增加单库单实例已经不能满足业务需要。技术人员是比较懒惰的,每次敲相同命令或是无脑的复制黏贴操作感觉都是对精神的一种摧残,解决摧残的方法就是把命令…...

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算
这里介绍一个小TIPS,很久没有这么有成就感了。我以前在学3D数学的时候,书上就有一句话,说你把矢量这些东西用久了,就应该形成一种“直觉”,仿佛这些东西就是你的左右手一样。而这次,我居然真的用“直觉”来…...

ICMP 和 IGMP 的区别
ICMP 和 IGMP 协议 IP 层分支图 ICMP(Internet Control Message Protocol,因特网控制信息协议) 用于补充 IP 传输数据报的过程中,发送主机无法确定数据报是否到达目标主机。 ICMP 报文分为出错报告报文和查询报文两种。 若数据…...

【Vue3】工程创建及目录说明
【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…...
算法学习2——排序算法(2)
上一篇介绍了几种常见且使用较多的排序算法,本章主要是一个进阶内容,介绍三个较为复杂的算法。 计数排序 (Counting Sort) 计数排序是一种适用于范围较小的整数序列的排序算法。它通过统计每个元素的出现次数,然后依次输出元素,…...

嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)
1、PWM简介 (1)、什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是在具有惯性的系统中利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制…...

python-NLP:1中文分词
文章目录 规则分词正向最大匹配法逆向最大匹配法双向最大匹配法 统计分词语言模型HMM模型 jieba分词分词关键词提取词性标注 规则分词 基于规则的分词是一种机械分词方法,主要是通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行…...

iOS 开发包管理之CocoaPods
CocoaPods(Objective-C 时期,支持Objective-C和swift),CocoaPods下载第三方库源代码后会将其编译成静态库.a 文件 或动态库框架.framework 文件 的形式,并将它们添加到项目中,建立依赖关系,这种…...

Windows搭建RTMP视频流服务器
参考了一篇文章,见文末。 博客中nginx下载地址失效,附上一个有效的地址: Index of /download/ 另外,在搭建过程中,遇到的问题总结如下: 1 两个压缩包下载解压并重命名后,需要 将nginx-rtmp…...

VS2019安装MFC组件
VS2019支持的MFC版本是mfc140 ~ mfc142版本,它兼容VS2015、VS2017之前的老版本程序。 一、MFC的历史版本 MFC的历史版本如下: IDE发布时间工具集版本MSC_VERMSVCMFC版本dllVisual C6.01998V601200MSVC6.06.0mfc42.dll、mfcce400.dllVisual Studio 2002…...

Python学习—open函数,json与pickle知识点,Os模块详解
目录 1. Open函数 2.json与pickle模块 json模块 1. json.dumps() 2. json.dump() 3. json.loads() 4. json.load() pickle 模块 1. pickle.dumps() 2. pickle.dump() 3. pickle.loads() 4. pickle.load() 3.Os模块 1. Open函数 在Python中,open() 函数…...

基于SSM的高考志愿选择辅助系统
基于SSM的高考志愿选择辅助系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台 前台首页 院校展示 后台 后台首页 学校管理 摘要 随着高考制度的不断完…...

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini
GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%,其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放,并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…...

【考研数学】线代满分经验分享+备考复盘
我一战二战复习都听了李永乐的线代课,二战的时候只听了一遍强化,个人感觉没有很乱,永乐大帝的课逻辑还是很清晰的。 以下是我听向量这一章后根据听课内容和讲义例题总结的部分思维导图,永乐大帝讲课的时候也会特意点到线代前后联…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...