基于Jenkins自动打包并部署Tomcat环境

基于上一章创建部署       Linux下Jenkins安装 (最新)_学习新鲜事物的博客-CSDN博客

传统网站部署的流程

在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新-->外网测试-->发布完成。如果在内网测试时发现代码有异常,返回代码开发人员名字,调整代码;如果在外网测试时发现外网部署的代码有异常,可以及时进行网站回滚。

传统代码上线的过程

开发人员发起代码上线的需求(邮件中包含开发做好的WAR包)-->运维人员连接线上负载调度器(Nginx)--> 隔离一组服务器(Tomcat)--> 连接服务器(Tomcat)--> 备份旧代码(tar打包)--> 删除旧代码目录 --> 上传新的WAR包 --> 外网测试 --> 测试不通过则通过备份回滚代码 --> 测试通过则利用rsync的脚本推送代码到其他服务器--> 统一外网测试 -->连接调度器恢复隔离机制  --> 隔离另一组服务器实施上线步骤 --> 上线完成。

目前主流网站部署的流程

目前主流网站部署方法:通过 Hudson/Jenkins 工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,属于开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins 非常易于安装和配置,简单易用。

  1. 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在 SVN、Git 仓库即可。
  2. 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新等操作。
  3. 测试人员:可以通过 Jenkins 进行简单的代码及网站测试。

Jenkins 的工作原理是先将源代码从 SVN/Git 版本控制系统中拷贝一份到本地,然后根据设置的脚本调用Maven进行 build(构建)。整个系统的关键就是 build 脚本,build 脚本告诉Jenkins 在一次集成中需要执行的任务。

实验环境

操作系统

IP地址

主机名

角色

CentOS7.5

192.168.50.51

git

git服务器

CentOS7.5

192.168.50.53

Jenkins git客户端

jenkins服务器

CentOS7.5

192.168.50.54

tomcat

web服务器

所有主机关闭防火墙和selinux

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0

1、配置git

git和Jenkins都要安装

[root@git ~]# yum -y install git

[root@jemkins ~]# yum -y install git

在git端配置用户

[root@git ~]# useradd git
[root@git ~]#  echo "123456" | passwd --stdin git
更改用户 git 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@git ~]# su - git
[git@git ~]$ mkdir probe.git
[git@git ~]$ cd probe.git
[git@git probe.git]$ git --bare init
初始化空的 Git 版本库于 /home/git/probe.git/
[git@git probe.git]$ exit
登出
[root@git ~]# rz

[root@git ~]#  tar xf psi-probe.tar.gz
[root@git ~]#  git clone git@192.168.50.51:/home/git/probe.git
正克隆到 'probe'...
git@192.168.50.51's password:
warning: 您似乎克隆了一个空版本库。

[root@git ~]#  cp -rf psi-probe/* probe/
[root@git ~]#  cd probe/

[root@git probe]# git add .
[root@git probe]#  git commit -m "all probe"

[root@git probe]#  git push origin master
git@192.168.50.51's password:
Counting objects: 1168, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (1121/1121), done.
Writing objects: 100% (1168/1168), 2.01 MiB | 0 bytes/s, done.
Total 1168 (delta 397), reused 0 (delta 0)
To git@192.168.50.51:/home/git/probe.git
 * [new branch]      master -> master

2、配置jenkins主机

1)添加验证凭据 :凭证这里添不添加都可以,这个试验不牵扯到凭证

 

 

在凭据页面中,点击“system”跳转到“系统”页面。点击左侧导航栏中“添加域”,

跳转到“添加域”页面。在该页面创建域名为“crushlinux”并点击“ok”完成配置。

“添加凭据”。

 web主机用户名密码

填写以上数据后,点击“确定”就可以查看到新增的远程 web 主机账号。

2)添加 Publish Over SSH 远程主机

在 Jenkins 首页中点击“Manage Jenkins”->“Configure System”->“Publish over SSH”->“SSH Servers”->“增加”选项按钮,添加 SSH 远程主机。如图 3.13 所示,输入 Name、Hostname、Username 等必要信息后,点击“高级”选项按钮->勾选“Use Password authentication,or use a different key”选项->输入“远程主机登录密码”->“Test Configuration”测试远程主机配置。测试远程主机配置成功后点击“保存”按钮即可。

在 最下面

 web服务器

 

3)配置 Maven、JDK、Git 环境

在 Jenkins 首页中点击“Manage Jenkins”->“Global Tool Configuration”->“JDK” ->新增“JDK”,设置 JDK 别名为”JDK17”。去掉“Install automatically”选项,设置 “JAVA_HOME”为本案例中 JDK 实际安装路径。

 Git 配置

[root@jemkins ~]# which git
/usr/bin/git

 

 Jenkins安装maven

[root@jemkins ~]#  tar xf apache-maven-3.5.0-bin.tar.gz
[root@jemkins ~]# mv apache-maven-3.5.0 /usr/local/maven-3.5.0
[root@jemkins ~]# vim /usr/local/maven-3.5.0/conf/settings.xml

146   <mirrors>
147     <mirror>
148         <id>nexus-aliyun</id>
149         <mirrorOf>central</mirrorOf>
150         <name>Nexus aliyun</name>
151         <url>http://maven.aliyun.com/nexus/content/groups/public</url>
152     </mirror>

153   </mirrors>

最后达到效果

刚刚界面中找到 Maven 配置选项,然后点击“新增 Maven”并设置别名为“Maven3.5”。

以上全局基本配置完毕后,点击保存即可完成。

3、配置web主机

[root@tomcat ~]#  tar xf apache-tomcat-8.5.40.tar.gz

[root@tomcat~]#  mv apache-tomcat-8.5.40 /usr/local/tomcat

java包可能会有问题所以还是下载好

[root@tomcat ~]# sudo yum install java-1.8.0-openjdk-devel

[root@tomcat ~]# vim /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export PATH=$JAVA_HOME/bin:$PATH

[root@tomcat ~]# source /etc/profile

 发布公钥给jenkins主机

[root@tomcat~]#  ssh-keygen

[root@tomcat ~]# ssh-copy-id 192.168.50.53

主机Jenkins默认用jenkins用户去连接git,所以用jenkins用户生成密钥对,并发送给git和web

[root@jemkins ~]# id jenkins

uid=997(jenkins) gid=995(jenkins) 组=995(jenkins)

[root@jemkins ~]# su -s /bin/bash jenkins

bash-4.2$ ssh-keygen

bash-4.2$ ssh-copy-id git@192.168.50.51

登陆测试

bash-4.2$ ssh git@192.168.50.51

Last login: Fri Aug 25 14:10:41 2023

[git@git ~]$ exit

登出

Connection to 192.168.50.51 closed.

bash-4.2$ exit

exit

主机给其他主机也做密钥保险一点

[root@jemkins ~]# ssh-copy-id 192.168.50.51

[root@jemkins ~]# ssh-copy-id 192.168.50.54

4、新建Maven项目

在以上配置完成后,回到 Jenkins 首页,选择“新建任务”,然后输入一个任务名称 “probe”,并选中“Maven project”点击当前页面下方的“确定”按钮。

 

在点击“确定”按钮后,选择“源码管理”选中“Git”,配置“RepositoriesURL”为

git@192.168.50.51:/home/git/probe.git

 往下选择“Build”

这是一个Maven命令,意思是在执行项目构建时,执行clean和package两个Maven目标。"-Dmaven.test.skip=true"的作用是跳过执行测试用例。具体来说:

  • clean:清除项目目录中旧的构建结果,以便重新构建。
  • package:将项目编译成可执行的JAR包或WAR包(如果是Web应用程序)等,以便进行部署。
  • -Dmaven.test.skip=true:在构建时跳过测试阶段,以加快构建过程的速度。如果不跳过测试,则Maven会自动执行项目中所有的测试用例。

因此,运行这个命令将会对项目进行彻底清理,并将最终的构建结果打包成可执行的JAR包或WAR包(如果是Web应用程序)等,而且不会执行测试用例。

clean package -Dmaven.test.skip=true

选择“构建后操作“中的“send build artfacts over SSH” “Exec command”中执行命令的含义是:在自动部署前先杀掉 Tomcat 进程,然后删除 war 包,用 scp 远程拷贝命令将 Jenkins 自动打包好的项目 war 包拷贝到当前 Tomcat 应用目录。 然后重启 Tomcat 。

scp 192.168.50.53:/root/.jenkins/workspace/probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps/

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

 以上全部配置完成后,点击保存即可。然后点击刚才创建的“probe”->“Build Now” 直至项目构建完成。构建过程可以在“控制台输出”中查看到。

 

5、验证 Jenkins 自动打包部署结果

在web主机上查看 probe 目录是否被拷贝到/usr/local/tomcat/webapps 目录下

[root@tomcat webapps]# ll

总用量 26624

drwxr-x---. 14 root root     4096 8月  25 14:03 docs

drwxr-x---.  6 root root       83 8月  25 14:03 examples

drwxr-x---.  5 root root       87 8月  25 14:03 host-manager

drwxr-x---.  5 root root      103 8月  25 14:03 manager

drwxr-x---.  7 root root       88 8月  25 15:59 probe

-rw-r--r--.  1 root root 27253121 8月  25 15:59 probe.war

drwxr-x---.  3 root root     4096 8月  25 14:03 ROOT

从构建后的执行命令可以看出,Tomcat 已经重新启动,通过浏览器访问测试 probe 监控系统。http://192.168.50.54:8080/probe

 创建用户免密

[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat-users.xml

 44   <role rolename="manager-gui"/>

 45   <role rolename="admin-gui"/>

 46   <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

 47 </tomcat-users>

~                    

 注释掉

[root@tomcat ~]#  vim /usr/local/tomcat/webapps/manager/META-INF/context.xml

 19 <!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"

 20          allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

 重启服务

[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh

Using CATALINA_BASE:   /usr/local/tomcat

Using CATALINA_HOME:   /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk/

Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@tomcat ~]#  /usr/local/tomcat/bin/startup.sh

Using CATALINA_BASE:   /usr/local/tomcat

Using CATALINA_HOME:   /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk/

Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Tomcat started.

 登陆

 

 至此,Jenkins 自动打包部署完毕。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【位运算】算法实战

文章目录 一、算法原理常见的位运算总结 二、算法实战1. leetcode面试题01.01. 判断字符是否唯一2. leetcode268 丢失的数字3. leetcode371 两整数之和4. leetcode004 只出现一次的数字II5. leetcode面试题17.19. 消失的两个数字 三、总结 一、算法原理 计算机中的数据都以二进…

243:vue+Openlayers 更改鼠标滚轮缩放地图大小,每次缩放小一点

第243个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中设置鼠标滚轮缩放地图大小,每次滑动一格滚轮,设定的值非默认值1。具体的设置方法,参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…

SMC_TRAFO_GantryCutter2 (FB) 带刀片旋向龙门

裁布机&#xff1a;刀片按XY走向&#xff0c;偏转刀片角度。 pi&#xff1a;目标位置矢量&#xff08;x&#xff0c;y&#xff09;&#xff0c;插值器的输出 v&#xff1a;当前路径切线的矢量&#xff0c;插值器的输出 dOffsetX&#xff1a; x轴的附加偏移 dOffsetY&#xf…

【C++精华铺】9.STL string

目录 1. string类的优势 2. string类的常用接口 2.1 常用构造 1. 空串构造&#xff1a;string(); 2. C串构造&#xff1a;string(const char* s); 3. 拷贝构造&#xff1a;string(const string& str); 4. 字符填充构造&#xff1a;string(size_t n, char c); 5. 迭代…

大数据开发要学习什么?学完又能做什么

学习大数据需要掌握什么语言基础&#xff1f; 1、Java基础 大数据框架90%以上都是使用Java开发语言&#xff0c;所以如果要学习大数据技术&#xff0c;首先要掌握Java基础语法以及JavaEE方向的相关知识。 2、MySQL数据库 这是学习大数据必须掌握的知识之一。数据的操作语言是…

研磨设计模式day11观察者模式

目录 场景 代码示例 定义 观察者模式的优缺点 本质 何时选用 简单变型-区别对待观察者 场景 我是一家报社&#xff0c;每当我发布一个新的报纸时&#xff0c;所有订阅我家报社的读者都可以接收到 代码示例 报纸对象 package day11观察者模式;import java.util.Observ…

Ubuntu20.04配置mysql配置主从复制

ubuntu20.04&#xff1a;mysql主库 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 修改完毕重启 sudo service mysql stop sudo service mysql start主库mysqld.cnf配置 [mysqld] ... # bind-address>->--- 127.0.0.1 # 注释掉&#xff0c;允许外部连接 # mysqlx-b…

Spark整合hive的时候出错

Spark整合hive的时候 连接Hdfs不从我hive所在的机器上找&#xff0c;而是去连接我的集群里的另外两台机器 但是我的集群没有开 所以下面就一直在retry 猜测&#xff1a; 出现这个错误的原因可能与core-site.xml和hdfs-site.xml有关&#xff0c;因为这里面配置了集群的nameno…

浅析 GlusterFS 与 JuiceFS 的架构异同

在进行分布式文件存储解决方案的选型时&#xff0c;GlusterFS 无疑是一个不可忽视的考虑对象。作为一款开源的软件定义分布式存储解决方案&#xff0c;GlusterFS 能够在单个集群中支持高达 PiB 级别的数据存储。自从首次发布以来&#xff0c;已经有超过十年的发展历程。目前&am…

Pycharm通过SSH配置centos上Spark环境

直接在shell进行pyspark进行编程&#xff0c;程序没有办法写得太长&#xff0c;而且我们希望能够实现一个及时给出结果的编程环境&#xff0c;可以使用pycharm连接centos上的spark&#xff0c;进行本地编程&#xff0c;同步到centos系统中运行程序&#xff0c;并把结果返回pych…

IMS中Binder案例

IMS中Binder案例 1、FWK层中AIDL形式1.1 服务端实现Stub1.2 客户端获取proxy 2、Native层中AIDL形式2.1 服务端对应Bn端2.2 客户端对应Bp端 android12-release 1、FWK层中AIDL形式 Android 接口定义语言 (AIDL)、Android 应用层 到 HAL 层 AIDL形式是Android中binder机制的具体…

HAproxy服务及keepalived+haproxy高可用

本节主要学习AHproxy 的概述&#xff0c;安装&#xff0c;调度算法&#xff0c;配置文件&#xff0c;负载均衡&#xff0c;配置syslog日志&#xff0c;keepalivedhaproxy实现高可用。 目录 一、概述 1、简介 2、核心功能 3、关键特性 4、应用场景 二、安装 1.内核配置 …

Delphi 开发手持机(android)打印机通用开发流程(举一反三)

目录 一、场景说明 二、厂家应提供的SDK文件 三、操作步骤&#xff1a; 1. 导出Delphi需要且能使用的接口文件&#xff1a; 2. 创建FMX Delphi项目&#xff0c;将上一步生成的接口文件&#xff08;V510.Interfaces.pas&#xff09;引入: 3. 将jarsdk.jar 包加入到 libs中…

开始MySQL之路——MySQL安装和卸载

MySQL的介绍 MySQL数据库管理系统由瑞典的DataKonsultAB公司研发&#xff0c;该公司被Sun公司收购&#xff0c;现在Sun公司又被Oracle公司收购&#xff0c;因此MySQL目前属于Oracle旗下产品。 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权…

四、Kafka Broker

4.1.1 Zookeeper 存储的 Kafka 信息 4.1.2 Kafka Broker 总体工作流程 4.2 生产经验 - 节点的服役和退役 自己的理解&#xff1a;其实就是将kafka的分区&#xff0c;负载到集群中的各个节点上。 1、服役新节点 2、退役旧节点 4.3 kafka副本 1、副本的作用 2、Leader的…

共享内存 windows和linux

服务端&#xff0c;即写入端 #include <iostream> #include <string.h> #define BUF_SIZE 1024 #ifdef _WIN32 #include <windows.h> #define SHARENAME L"shareMemory" HANDLE g_MapFIle; LPVOID g_baseBuffer; #else #define SHARENAME "sh…

Node.js 的 Buffer 是什么?一站式了解指南

在 Node.js 中&#xff0c;Buffer 是一种用于处理二进制数据的机制。它允许你在不经过 JavaScript 垃圾回收机制的情况下直接操作原始内存&#xff0c;从而更高效地处理数据&#xff0c;特别是在处理网络流、文件系统操作和其他与 I/O 相关的任务时。Buffer 是一个全局对象&…

Sql Server导出数据库到另一个数据库

1.打开sql server数据库&#xff0c;连接到服务器后&#xff0c;找到需要导出的数据库&#xff0c;右击后选择 任务->导出数据。 2.点击 下一步。 3.身份验证可以使用SQL Server身份验证&#xff0c;就是当时建立连接时的用户名和密码&#xff0c;数据库名称使用默认的&…

深度学习入门教学——二分分类

1、什么是二分分类&#xff1f; 二分分类就是判断“有”和“没有”、“是”和“不是”的问题&#xff0c;也就是监督学习中的分类问题。例如&#xff0c;输入一张图片&#xff0c;输出识别该图片的标签。计算机输入图片转化过程如下&#xff1a; 2、神经网络常用符号表示 (x, …

一次harbor升级导致镜像项目访问无权限问题

一、问题背景 将环境中现运行的harbor版本升级到2.6.2版本&#xff0c;相关同事升级完&#xff0c;发现有部分镜像项目点进去报无权限问题&#xff0c;镜像项目无法使用&#xff0c;但是也有部分项目是可以正常提供使用的。 二、问题处理过程 1、根据报错反馈没权限&#xff…