tomcat,Jenkins
1.什么是中间件
中间件(英语:Middleware):是系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件在客户服务器的操作系统、网络和数据库之上,管理计算资源和网络通信。总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
关于中间件,我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。中间件是一类软件统称,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作。
2.中间件的特点
满足大量应用的需要
运行于多种硬件和OS平台
支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互
支持标准的协议
支持标准的接口
3.常见的中间件
tomcat
apache或hpptd
jetty
jboss
webloigc
websphere
一般本地开发的话常使用tomcat
linux系统常使用jetty或apache hpptd
大型的项目就用JBOSS或webloigc
我们经常管中间件叫做中间服务器,也可以叫做应用服务器。通常情况下一次web的访问顺序是:web浏览器——web服务器——web容器——应用服务器——数据库服务器。
3.1tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
tomcat就是传说中的中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中。而tomcat本身的运行也依赖于jdk环境。
tomcat应用场景:
一般本地开发的话常使用tomcat。
适用于lnmt
3.2jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
3.3jboss
jboss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术
3.4webloigc
WebLogic服务器是企业级的应用服务器,支持EJB, 集群以及 ERP(企业资源计划)的连通性 ,开发公司:BEA。
3.5websphere
websphere产品系列是IBM公司一套典型的电子商务应用开发工具及运行环境。
4.tomcat项目部署
4.1 java环境安装
# 安装jdk环境 [root@localhost ~]# dnf -y install java-latest-openjdk-devel.x86_64 java-latest-openjdk.x86_64 #查看安装的版本 [root@localhost ~]# java -version openjdk version "18.0.1" 2022-04-19 OpenJDK Runtime Environment 22.3 (build 18.0.1+10) OpenJDK 64-Bit Server VM 22.3 (build 18.0.1+10, mixed mode, sharing)
#下载tomcat,我已经提前下好,直接通过xftp传过来的 [root@localhost ~]# ls anaconda-ks.cfg apache-tomcat-9.0.65.tar.gz [root@localhost ~]# mv apache-tomcat-9.0.65.tar.gz /usr/src/ [root@localhost ~]# cd /usr/src/ [root@localhost src]# ls apache-tomcat-9.0.65.tar.gz debug kernels
#解压部署 [root@localhost src]# ls apache-tomcat-9.0.65.tar.gz debug kernels [root@localhost src]# tar xf apache-tomcat-9.0.65.tar.gz -C /usr/local/
[root@localhost src]# ls apache-tomcat-9.0.65.tar.gz debug kernels [root@localhost src]# cd /usr/local/ [root@localhost local]# ls apache-tomcat-9.0.65 etc include lib64 sbin src bin games lib libexec share [root@localhost local]# ln -s apache-tomcat-9.0.65/ tomcat [root@localhost local]# ll 总用量 0 drwxr-xr-x. 9 root root 220 8月 16 05:55 apache-tomcat-9.0.65 drwxr-xr-x. 2 root root 6 5月 19 2020 bin drwxr-xr-x. 2 root root 6 5月 19 2020 etc drwxr-xr-x. 2 root root 6 5月 19 2020 games drwxr-xr-x. 2 root root 6 5月 19 2020 include drwxr-xr-x. 2 root root 6 5月 19 2020 lib drwxr-xr-x. 3 root root 17 6月 29 01:01 lib64 drwxr-xr-x. 2 root root 6 5月 19 2020 libexec drwxr-xr-x. 2 root root 6 5月 19 2020 sbin drwxr-xr-x. 5 root root 49 6月 29 01:01 share drwxr-xr-x. 2 root root 6 5月 19 2020 src lrwxrwxrwx. 1 root root 21 8月 16 05:57 tomcat -> apache-tomcat-9.0.65/
#写一个hello world的java页面 [root@localhost ]# vi index.jsp <html> <head> <title>test page</title> </head> <body> <% out.println("Hellow World"); %> </body> </html> [root@localhost local]# cd /usr/local/tomcat/webapps/ [root@localhost webapps]# ls docs examples host-manager manager ROOT [root@localhost webapps]# mkdir test [root@localhost webapps]# ls docs examples host-manager manager ROOT test [root@localhost webapps]# cd test/ [root@localhost local]# mv index.jsp /usr/local/tomcat/webapps/test/ [root@localhost ~]# cd /usr/local/tomcat/webapps/test/ [root@localhost test]# ll 总用量 4 -rw-r--r--. 1 root root 141 8月 16 05:59 index.jsp #启动tomcat [root@localhost ~]# /usr/local/tomcat/bin/catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. [root@localhost ~]# ps -ef|grep tomcat root 10564 1 17 06:11 pts/0 00:00:04 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/localtomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 10596 1646 0 06:12 pts/0 00:00:00 grep --color=auto tomcat [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* LISTEN 0 100 *:8080 *:* LISTEN 0 128 [::]:22 [::]:*
修改配置文件
[root@localhost ~]# cd /usr/local/tomcat/conf [root@localhost conf]# ls Catalina jaspic-providers.xml tomcat-users.xml catalina.policy jaspic-providers.xsd tomcat-users.xsd catalina.properties logging.properties web.xml context.xml server.xml [root@localhost conf]# vi tomcat-users.xml #修改这个文件 ...省略 <!-- The sample user and role entries below are intended for use with the examples web application. They are wrapped in a comment and thus are ignored when reading this file. If you wish to configure these users for use with the examples web application, do not forget to remove the <!.. ..> thatsurrounds them. You will also need to set the passwords to something appropriate. --> <role rolename="manager-gui"/> #把这三行添加到此处,但是要注意不要加到注释区域里面去了,意思是可以用网页访问管理界面,以及登录的账号密码 <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> <!-- <role rolename="tomcat"/> <role rolename="role1"/> <user username="tomcat" password="<must-be-changed>" roles="tomcat"/> <user username="both" password="<must-be-changed>" roles="tomcat,role1"/> ...省略 # 上面设置以后只能本地访问,还需要做一下操作 [root@localhost ~]# cd /usr/local/tomcat/webapps/manager/META-INF [root@localhost META-INF]# ls context.xml [root@localhost META-INF]# vim context.xml # 添加访问的网段 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.6\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@localhost ~]# cd /usr/local/tomcat/webapps/host-manager/META-INF #这个目录下的也要改
[root@localhost META-INF]# ls
context.xml
[root@localhost META-INF]# vim context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.6\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@localhost ~]# cd /usr/local/tomcat/conf [root@localhost conf]# ls Catalina jaspic-providers.xml tomcat-users.xml catalina.policy jaspic-providers.xsd tomcat-users.xsd catalina.properties logging.properties web.xml context.xml server.xml [root@localhost conf]# vim server.xml # 找到此内容,取消注释 Define an AJP 1.3 Connector on port 8009 <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> # 重启注释 [root@localhost ~]# /usr/local/tomcat/bin/catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* LISTEN 0 100 [::1]:8009 [::]:* LISTEN 0 100 *:8080 *:* LISTEN 0 128 [::]:22 [::]:*
程序打包工具
maven:
Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。
Maven项目对象模型(POM)是一个项目管理工具软件,可以通过简短的中央信息描述来管理项目的搭建,报告和文档等步骤。
Maven是一个项目管理的工具,可以对项目进行构建、依赖的管理。
ant:
Ant是Java的生成工具,是Apache的核心项目;
Ant类似于Unix中的Make工具,都是用来编译、生成;
Ant是跨平台的,而Make不能;
Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目。
gradle:
Ant是Java的生成工具,是Apache的核心项目;
Ant类似于Unix中的Make工具,都是用来编译、生成;
Ant是跨平台的,而Make不能;
Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目。
jenkins
1.jenkins是什么
jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站,比如github、bitbucket直接集成。通过这个软件来管理我们正在开发的项目,可以让它来减少我们软件开发的时候的出错率,替我们把软件合到一起,并且将有问题的部分检测出来。
Jenkins可自由部署在各平台:Windows, Linux, Mac
2.什么是CICD
CI(Continuous Integration):持续集成
CD(Continuous Delivery):持续交付
CD(Continuous Deployment):持续部署
我们先看一下软件开发演变的一个过程:
从第一台计算机出现以后,它就离不开程序的驱动,负责程序编写的人就叫做程序员,程序员是计算机的驾驭者。随着科技的不断发展,internet的相继出现,我们进入了全民拥抱信息化的时代,越来越多的企业开始将计算机作为办公用的工具,用以提升生产力。而普通个人用户也开始将计算机作为娱乐工具,用以改善生活品质。
于是,计算机的程序,开始变成了一门生意。程序,逐步演进为“软件(software)”,变成了最赚钱的产品之一。
在软件产业里,程序员有了更专业的称谓,叫做“软件开发工程师(Software Development Engineer)”,也就是我们常说的“码农”。
一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护。
起初,程序比较简单,工作量不大,一个人都可以完成。
随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升。一个人已经hold不住了,就开始出现了精细化分工。
码农的队伍扩大,工种增加。除了软件开发工程师之外,又有了软件测试工程师,软件运维工程师。
瀑布模型(Waterfall)
分工之后,早起采用的软件开发流程叫“瀑布模型(Waterfall)”。
需求 -> 设计 -> 开发 -> 测试 -> 部署
瀑布模型,简而言之,就是等一个阶段所有工作完成之后,再进入下一个阶段。
这种模型比较理想化,大家各司其职,做好自己的事情即可。
但是项目不可能是单向运作的,同时客户也是有需求的,而且产品上线之后肯定也会有问题,需要改进。
随着时间推移,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少。在这个情况下,大家发现,笨重迟缓的瀑布式开发已经不合时宜了。
敏捷开发(Agile Development)
于是,软件开发团队引入了一个新的概念,那就是大名鼎鼎的——“敏捷开发(Agile Development)”。
敏捷开发大幅提高了开发团队的工作效率,让版本的更新速度变得更快。敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。
虽然敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节。研发们发现,运维那边,依旧是铁板一块,成为了新的瓶颈。
运维的核心诉求,就是不出问题。那么什么时候最喜欢出现问题呢?就是软件更新的时候。所以开发和运维之间就产生了矛盾。
DevOps
这个时候DevOps应时而生。DevOps这个词,其实就是Development(开发)和Operations(运维)两个词的组合。
DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。
随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法,
持续集成:
开发人员将写好的代码合并到一个代码仓库中,每次提交都能通过自动化测试进行验证,从而使问题尽早暴露和解决。
持续交付:
是持续集成的扩展,将代码进行打包,构成镜像,传到镜像仓库。持续交付的本质是把每个构建成功的应用更新交付给用户使用。在持续交付的世界里,我们对完成的定义不是测试完成,而是交付到客户手中。持续交付的好处在于快速获取用户反馈,适应市场变化和商业策略的变化。开发团队保证每次提交的修改都是可上线的修改,那么决定何时上线,上线哪部分功能则完全由产品业务团队决定。
持续部署:
对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付自动将生产就绪型构建版本发布到代码存储库的延伸,持续部署可以自动将应用发布到生产环境或者测试环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的测试自动化。
实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于降低应用的部署风险,因此更便于以小件的方式(而非一次性)发布对应用的更改。不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期投资还是会很大。
3.jenkins部署
下载jenkins
# 将下好的包复制到/usr/local/tomcat/webapps/下面会自动生成jenkins目录 [root@localhost ~]# ls anaconda-ks.cfg jenkins.war [root@localhost ~]# cp jenkins.war /usr/local/tomcat/webapps/ [root@localhost ~]# cd /usr/local/tomcat/webapps/ [root@localhost webapps]# mv * /opt/
[root@localhost webapps]# ls docs examples host-manager jenkins jenkins.war manager ROOT test [root@localhost webapps]# cd jenkins [root@localhost jenkins]# ls bootstrap JNLPMain.class META-INF ColorFormatter.class jsbundles robots.txt css 'LogFileOutputStream$1.class' scripts executable LogFileOutputStream.class WEB-INF favicon.ico 'Main$FileAndDescription.class' winstone.jar help Main.class images MainDialog.class
在浏览器进行访问
根据网页提示查看管理员密码
[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword
4b6f2310c7eb42cea379bf7a25f198d1
用户列表
系统管理
# 工作目录的位子,里面存放所有的数据,报错任务,用户,插件,用户内容等等 [root@localhost ~]# cd .jenkins [root@localhost .jenkins]# ls config.xml nodeMonitors.xml hudson.model.UpdateCenter.xml nodes hudson.plugins.emailext.ExtendedEmailPublisher.xml plugins hudson.plugins.git.GitTool.xml queue.xml.bak identity.key.enc secret.key jenkins.install.InstallUtil.lastExecVersion secret.key.not-so-secret jenkins.install.UpgradeWizard.state secrets jenkins.model.JenkinsLocationConfiguration.xml updates jenkins.telemetry.Correlator.xml userContent jobs users [root@localhost .jenkins]# pwd /root/.jenkins
创建一个项目
部署任务2
准备两台主机,192.168.6132部署tomcat和Jenkins,去代码仓库拉取代码,打包,传到192.168.6.135
192.168.6.135部署好tomcat,进行访问,tomcat,jenkins的部署请看文章前半段。
首先手动配置一下
# 首先下载拉去代码的命令git和打包的命令maven [root@localhost ~]# dnf -y install git [root@localhost ~]# dnf -y install maven #用git命令拉去仓库的代码 [root@localhost ~]# git clone https://github.com/chendao2015/tomcat-java-demo.git # 拉取好了 [root@localhost ~]# ls anaconda-ks.cfg jenkins.war tomcat-java-demo [root@localhost ~]# cd tomcat-java-demo/ [root@localhost tomcat-java-demo]# ls db Dockerfile LICENSE pom.xml README.md src #用mvn命令打包 [root@localhost tomcat-java-demo]# mvn clean package -Dmaven.test.skip=true #打包好以后进到target目录 [root@localhost ~]# cd tomcat-java-demo/ [root@localhost tomcat-java-demo]# ls db Dockerfile LICENSE pom.xml README.md src target [root@localhost tomcat-java-demo]# cd target/ [root@localhost target]# ls classes ly-simple-tomcat-0.0.1-SNAPSHOT maven-archiver generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-status #把ly-simple-tomcat-0.0.1-SNAPSHOT.war传到135主机上的/usr/local/tomcat/webapps/目录下 [root@localhost target]# scp ly-simple-tomcat-0.0.1-SNAPSHOT.war root@192.168.6.135:/usr/local/tomcat/webapps/ #设置免密登录 [root@localhost target]# ssh-keygen -t rsa #生成一对密钥 [root@localhost target]# ssh-copy-id root@192.168.6.135 #把私钥传到135去
使用135来访问
网页配置
pipeline { agent any stages { stage("pull code"){ #步骤,拉代码 steps { git 'https://github.com/chendao2015/tomcat-java-demo.git' } } stage("make pkg"){ # 打包代码 steps { sh """ mvn clean package -Dmaven.test.skip=true """ } } stage("Deployment project"){ steps { sh """ scp target/ly-simple-tomcat-0.0.1-SNAPSHOT.war root@192.168.6.135:/usr/local/tomcat/webapps/
ssh root@192.168.6.135 '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start' """ } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?