【运维知识高级篇】超详细的Jenkins教程3(Maven项目上线全流程)

news2024/11/26 10:48:31

上篇文章给大家介绍了Maven编译的内容,讲解了用Jenkins如何去集成Maven,这篇文章给大家介绍另一个的Maven项目,实现gitlab提交代码后,自动进行Maven编译,自动推送至web主机进行代码上线的效果。

文章目录

  • 一、主机介绍
  • 二、在Web主机部署Tomcat和数据库
  • 三、部署war包,简单展示Web页面
  • 四、新建Gitlab项目并推送代码
  • 五、配置Jenkins
  • 六、编写脚本
  • 七、测试Maven项目上线全流程

一、主机介绍

主机名IP
Web0110.0.0.7
Jenkins10.0.0.201

二、在Web主机部署Tomcat和数据库

1、安装JDK

rz jdk-8u181-linux-x64.rpm
rpm -ivh jdk-8u181-linux-x64.rpm

2、安装Tomcat

rz apache-tomcat-8.0.27.tar.gz
tar zvxf apache-tomcat-8.0.27.tar.gz
mv /application/apache-tomcat-8.0.27 /usr/local/tomcat

3、修改Tomcat配置提升启动速度

vim /usr/java/jdk1.8.0_181-amd64/jre/lib/security/java.security
第117行修改为  securerandom.source=file:/dev/urandom

4、启动Tomcat

/usr/local/tomcat/bin/startup.sh

5、安装数据库

yum -y install mariadb
systemctl start mariadb.service 
mysql_secure_installation
mysqladmin -uroot password 'root'
mysql -uroot -proot -e 'create database jeesns;'

# 下面我把jeesns的代码包放到web服务器了,正常情况下,如果代码在jenkins服务器,可以scp把sql文件拷贝过来,再执行sql
rz jeesns.tar.gz
tar xf jeesns.tar.gz -C /opt/
mysql -uroot -p1 jeesns < /opt/jeesns/jeesns-web/database/jeesns.sql

三、部署war包,简单展示Web页面

jeesns.tar.gz 下载链接放到文末了

[root@Jenkins ~]# tar xf jeesns.tar.gz -C /opt/
[root@Jenkins ~]# cd /opt/jeesns/
[root@Jenkins jeesns]# mvn clean
[root@Jenkins jeesns]# mvn package
[root@Jenkins jeesns]# scp target/jeesns-web.war 10.0.0.7:/usr/local/tomcat/webapps/ROOT
[root@Jenkins jeesns-web]# ssh 10.0.0.7 'cd /usr/local/tomcat/webapps/ROOT && unzip jeesns-web.war && /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh '

等tomcat完全启动后,浏览器访问10.0.0.7的端口,就可以访问到了

在这里插入图片描述

四、新建Gitlab项目并推送代码

在这里插入图片描述

在这里插入图片描述

记录此处的镜像源,一会儿要在Jenkins里面用

在这里插入图片描述

按照指令提示执行这两个部分的命令

在这里插入图片描述

[root@Gitlab ~]# git config --global user.name "Administrator"
[root@Gitlab ~]# git config --global user.email "admin@example.com"
[root@Gitlab ~]# cd /data/jeesns/
[root@Gitlab jeesns]# git remote rename origin old-origin
[root@Gitlab jeesns]# git remote add origin git@10.0.0.200:root/JEESNS.git
[root@Gitlab jeesns]# git push -u origin --all
[root@Gitlab jeesns]# git push -u origin --tags

刷新浏览器可以看到上传的代码

在这里插入图片描述

在这里插入图片描述

五、配置Jenkins

1、新建Maven项目并进行配置

在这里插入图片描述
在这里插入图片描述

配置丢弃旧的构建

在这里插入图片描述

配置参数化构建
在这里插入图片描述

配置镜像源,此处报红色错误,可能是需要做jenkins到gitlab服务器的免密钥,配置通过版本号拉取代码

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

在这里插入图片描述

填写master,配置推送请求的规则,只有包含master字样的名称才会推送,点击Generate生成秘钥,将此秘钥记录下来
在这里插入图片描述

添加clean package指令,和执行指定位置的构建脚本的构建步骤

在这里插入图片描述

最终点击保存,点击保存后,将刚刚自动构建的秘钥复制到gitlab

在这里插入图片描述

六、编写脚本

在Jenkins中构建步骤指定的位置编写脚本。

[root@Jenkins ~]# cat /server/scripts/maven_JEESNS.sh
#!/bin/sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/JEESNS"
WEB_DIR="/usr/local/tomcat/webapps"

get_code_scp(){
        ssh 10.0.0.7 "cd $WEB_DIR && mkdir java-${git_version}"
        cd $CODE_DIR && scp jeesns-web/target/*.war 10.0.0.7:$WEB_DIR/java-${git_version}
}


code_tarxf(){
        ssh 10.0.0.7 "cd $WEB_DIR/java-${git_version} &&  unzip *.war && rm -rf *.war"

}
ln_html(){
         ssh 10.0.0.7 "cd $WEB_DIR/  && rm -rf ROOT && ln -s  java-${git_version} ROOT  && /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh"
}

main(){

        get_code_scp;
        code_tarxf;
        ln_html;
}
if [ "$deploy_env" == "deploy" ];then
        if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
            echo "构建失败该 $git_version 版本号已部署"
        else
        main
        fi
elif [ "$deploy_env" == "rollback" ];then
        ln_html
fi

七、测试Maven项目上线全流程

1、修改代码

[root@Gitlab jeesns]# vim jeesns-web/src/main/webapp/WEB-INF/templates/front/index.ftl 
...
                    <div class="panel-heading">
                        推荐阅读v1.0
                    </div>
...

2、推送代码

[root@Gitlab jeesns]# git add .
[root@Gitlab jeesns]# git commit -m "v1.0"
[root@Gitlab jeesns]# git tag -a v1.0 -m "v1.0"
[root@Gitlab jeesns]# git push -u origin v1.0

3、Jenkins选择版本部署
在这里插入图片描述
在这里插入图片描述
可以看到构建成功(因为马虎失败了两次,所以序号显示3)
在这里插入图片描述
4、查看v1.0部署效果并再次修改代码,推送代码,用Jenkins部署新版本
在这里插入图片描述

[root@Gitlab jeesns]# vim jeesns-web/src/main/webapp/WEB-INF/templates/front/index.ftl 
...
                    <div class="panel-heading">
                        推荐阅读v2.0
                    </div>
...
[root@Gitlab jeesns]# git add .
[root@Gitlab jeesns]# git commit -m "v2.0"
[root@Gitlab jeesns]# git tag -a v2.0 -m "v2.0"
[root@Gitlab jeesns]# git push -u origin v2.0

在这里插入图片描述
5、查看v2.0部署效果,并回滚v1.0查看效果

v2.0更改成功!

在这里插入图片描述

回滚的话是比较快的,不用去拉取代码,其实没有deploy和rollback的选项也可以,可以根据代码仓库与现有版本的版本号的大小去判断是部署还是回滚,除非是部署之前的版本,然后之前的版本也需要去代码仓库拉取代码,这种情况应该很少。
在这里插入图片描述
可以在此处查看

在这里插入图片描述
也可以在web后端服务器查看

[root@Web01 webapps]# ll
total 4
drwxr-x--- 16 root root 4096 Jun 30 10:44 docs
drwxr-x---  7 root root   99 Jun 30 10:44 examples
drwxr-x---  6 root root   79 Jun 30 10:44 host-manager
drwxr-xr-x  5 root root  126 Sep 28 15:40 java-v1.0
drwxr-xr-x  5 root root  104 Sep 28 15:50 java-v2.0
drwxr-x---  6 root root  114 Jun 30 10:44 manager
lrwxrwxrwx  1 root root    9 Sep 28 15:57 ROOT -> java-v1.0

也可以在页面上查看效果,就是tomcat重启太慢了,页面效果要等好久

在这里插入图片描述

也可以做个通知机制,企业微信给开发通知,等等吧,方式很多。


Maven项目练手代码下载链接:https://pan.baidu.com/s/1ifkGhh34uxhoTqmhf7e1lg?pwd=8464
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统笔记八】任务调度信号处理CPU上下文

任务调度 何时需要调度执行一个任务&#xff1f; 第一&#xff1a;当任务创建的时候&#xff0c;需要决定是继续执行父进程&#xff0c;还是调度执行子进程 第二&#xff1a;在一个任务退出时&#xff0c;需要做出调度决策&#xff0c;需要从 TASK_RUNNING 状态的所有任务中选…

IDEA 2019 Springboot 3.1.3 运行异常

项目场景&#xff1a; 在IDEA 2019 中集成Springboot 3.1.3 框架&#xff0c;运行异常。 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…

GaussDB数据库SQL系列-游标管理

目录 一、前言 二、概述&#xff08;GaussDB&#xff09; 1、游标概述 2、游标的使用分类 三、GaussDB中的显式游标&#xff08;示例&#xff09; 1、显式游标的使用与操作步骤 2、显式游标示例 四、GaussDB中的隐式游标&#xff08;示例&#xff09; 1、隐式游标简介…

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

通讯网关软件015——利用CommGate X2MQTT实现MQTT访问Modbus RTU

本文介绍利用CommGate X2MQTT实现MQTT访问Modbus RTU。CommGate X2MQTT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统上位机、PLC、设备具备Modbus RTU通讯接口&#xff0c;现在…

缓存雪崩、缓存击穿、缓存穿透

缓存雪崩 当缓存中大量的键值对同时过期或者Redis宕机了&#xff0c;大量的请求就会直接打到数据库&#xff0c;这种现象就是缓存雪崩 应对策略 有四种&#xff0c;分别是“均匀设置过期时间”、“互斥锁”、“双key策略”、“设置逻辑过期时间&#xff0c;异步更新缓存” …

WiFi产品认证通常需要准备哪些材料

我们做WiFi产品&#xff0c;都需要做一些认证。比方说FCC、CE、SRRC等认证。 认证需要准备很多材料。通常WiFi产品的认证需要准备的材料如下&#xff1a; 认证需要准备材料

解决使用flex布局引起的变形问题

只需在变形的样式中加以下代码&#xff0c;禁止拉伸就ok了 flex-shrink: 0;

【技巧】Ubuntu临时授予用户sudo权限,并在一定时间后自动撤销

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 目录 背景说明 开始操作 at指令 背景说明 有时候普通用户需要使用sudo来执行一些操作&#xff0c;作为服务器管理员&#xff0c;需要盯着该用户使用完后再给他撤销sudo权限。当用户多起来的时候&#xff0c;这…

游戏设计模式专栏(一):工厂方法模式

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 在游戏开发中&#xff0c;代码的组织和结构对于项目的可…

Centos 7 部署SVN服务器

一、安装SVN 1、安装Subversion sudo yum -y install subversion2、验证是否安装成功&#xff08;查看svn版本号&#xff09; svnserve --version二、创建版本库 1、先建立目录&#xff0c;目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库&#xff0c;添加权限…

web前端tips:js继承——寄生式继承

上篇文章给大家分享了 js继承中的 原型式继承 web前端tips&#xff1a;js继承——原型式继承 今天给大家分享一下 js 继承中的 寄生式继承 寄生式继承 寄生式继承&#xff08;Parasitic Inheritance&#xff09;是一种基于原型式的继承方式&#xff0c;它通过创建一个仅用于…

电气专业发展到头了?

今日话题 电气专业发展到头了&#xff1f; 电气绝对不是末路专业。但是有个前提&#xff0c;不要选错行业。大土木类的&#xff0c;不管是设计还是施工&#xff0c;都不要选择。 二、电网公司。电网是绕不开的话题&#xff0c;早些年电网待遇太好&#xff0c;搞得大家都理所…

最优化问题简介

最优化问题&#xff08;也称优化问题&#xff09;泛指定量决策问题&#xff0c;主要关心如何对有限 资源进行有效分配和控制&#xff0c;并达到某种意义上的最优&#xff0e;它通常需要对需求进 行定性和定量分析&#xff0c;建立恰当的数学模型来描述该问题&#xff0c;设计合…

SI3262:国产NFC+MCU+防水触摸按键三合一SoC芯片

目录 SI3262简介特点结构框图芯片特性 SI3262简介 Si3262是高度集成ACD低功耗MCUNFC15通道防水触摸按键的SoC芯片。 其MCU模块具有低功耗、Low Pin Count、宽电压工作范围&#xff0c;集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等丰富的…

WebGL雾化

目录 前言 如何实现雾化 线性雾化公式 雾化因子关系图 根据雾化因子计算片元颜色公式 示例程序&#xff08;Fog.js&#xff09; 代码详解​编辑 详解如何计算雾化因子&#xff08;clamp()&#xff09; 详解如何计算最终片元颜色&#xff08;根据雾化因子计算片元颜色…

KongA 任意用户登录漏洞分析

KongA 简介 KongA 介绍 KongA 是 Kong 的一个 GUI 工具。GitHub 地址是 https://github.com/pantsel/konga 。 KongA 概述 KongA 带来的一个最大的便利就是可以很好地通过UI观察到现在 Kong 的所有的配置&#xff0c;并且可以对于管理 Kong 节点 漏洞成因 未设置TOKEN_SECRE…

智能报修系统哪家好?有什么扫码一键报修的软件?

这是一套to b系统&#xff0c;专门为企事业单位提供日常的故障报修服务&#xff0c;单位员工遇到任何故障可扫码提交到平台上&#xff0c;再由平台根据技术维修员的擅长方向派单至技术维修员手中&#xff0c;全程可以跟踪报修的进度&#xff0c;每月可以导出维修记录&#xff0…

QT编译报错stdlib.h:No such file or directory

如图&#xff0c;需要将第19行&#xff0c;INCLUDEPATH /usr/include 注释掉 原因分析&#xff1a; 在Ubuntu的CSTDLIB中&#xff0c;使用的是#include_next下“stdlib.h” &#xff0c;自行增加/usr/include 把include_next的顺序打乱&#xff0c;造成编译错误。但是在cento…