基于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地址 | 主机名 | 角色 |
| CentOS 7.5 | 192.168.50.51 | git | git服务器 |
| CentOS 7.5 | 192.168.50.53 | Jenkins git客户端 | jenkins服务器 |
| CentOS 7.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 别名为"JDK11"。去掉"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 自动打包部署完毕。

相关推荐
java1234_小锋3 分钟前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
我的运维人生4 分钟前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
运维老司机5 分钟前
Jenkins修改LOGO
运维·自动化·jenkins
傻啦嘿哟16 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光20 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用21 分钟前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
爪哇学长34 分钟前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
Dola_Pan38 分钟前
C语言:数组转换指针的时机
c语言·开发语言·算法
ExiFengs38 分钟前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
paj12345678939 分钟前
JDK1.8新增特性
java·开发语言