Bootstrap

Tomcat + Jenkins 之安装与配置(window11)



前言

软件在开发的过程中,基本每天都会被集成一次,也就是说软件每时每刻都在发生变化,如果能在每次发生集成都通过自动化构建(包括编译、发布、自动化测试)来验证,便能尽早地发现集成错误,让团队得以更快地开发内聚的软件。而使用 Jenkins 进行软件的持续集成能在一定程度上实现以上需求,下面简单的介绍在 window11 系统下通过 Tomcat 部署 Jenkins 时所遇到的安装与配置运行的问题的内容。


一、window11 系统基于 Tomcat 部署 Jenkins思路分析

此文章的内容主要分为以下几大部分
1、安装JDK(Java17)
2、安装Tomcat( apache-tomcat-9.0.79 -windows-x64.zip)— 此处原本使用的是tomcat10的版本,由于出现404的问题,改为此版本
3、安装Jenkins(Jenkins 2.346.3 LTS),此处可通过msi文件安装,war文件安装
4、安装配置过程中遇到的问题分析
5、tomcat启动Jenkins并构建简单任务

二、JDK、Tomcat、Jenkins的安装与环境配置

1.下载安装JDK 17

(1)JDK下载链接:https://www.oracle.com/java/technologies/downloads/#jdk17-windows,进入以上网址,选择下载window版本的JDK 17,如下图所示,下载 x64 Compressed Archive 的压缩包便可
在这里插入图片描述
(2)这里下载完毕后解压jdk-17_windows-x64_bin.zip到E:\JDK\jdk-17.0.8_windows-x64_bin(根据自己实际情况安排存放路径即可)
在这里插入图片描述
(3)解压到本地文件夹后,window搜索框直接搜索环境变量,唤出系统属性菜单,配置JDK环境变量:新建 JAVA_HOME 环境变量: E:\JDK\jdk-17.0.8_windows-x64_bin ,并配置到Path上 :%java_home%bin (这里要配置到bin目录下)
在这里插入图片描述
(4)配置好环境变量后,win + R 输入cmd 进入window 终端输入:java -version,若提示JDK版本信息与安装的版本信息一致(如下所示),JDK环境便配置成功

C:\Users\12345>java -version
java version "17.0.8" 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)

2.下载安装TomCat

(1)Tomcat下载链接:https://tomcat.apache.org/ ,进入以上网址,查看Tomcat的版本信息,根据自己实际使用的jdk版本,下载对应的Tomcat版本,这里选择的是 apache-tomcat-9.0.79 的Tomcat的版本(原本选择的是10.1.12版本的,但后面启动Jenkins时遇到404的问题,就改成了9.0.79 的版本)
在这里插入图片描述
(2)点击进入下载页面,下载对应的包,这里使用的是window11进行的配置,所以下载的是64位的zip压缩包 apache-tomcat-9.0.79-windows-x64.zip
在这里插入图片描述
(3)下载完毕后,解压到本地文件夹后,更改tomcat压缩包名字为 tomcat9,window搜索框直接搜索环境变量,唤出系统属性菜单,把Tomcat配置到环境变量里面去。新建环境变量,变量名为 CATALINA_HOME,变量值为 E:\jenkins\tomcat9
在这里插入图片描述
(4) 新建完环境变量后,配置到Path上 :%CATALINA_HOME%bin
在这里插入图片描述
(5)如果发现“服务”中没有tomcat,打开Tomcat安装包的文件夹,进入安装目录下的bin目录,输入cmd进入终端,并输入 service.bat install 命令,安装服务,要是服务已存在可忽略此步骤
在这里插入图片描述

E:\jenkins\tomcat9\bin>service.bat install

(6)找到 E:\jenkins\tomcat9\bin 目录下的startup.bat文件,双击之后最后结果出现如下所示信息,有可能会遇到显示乱码的情况,出现乱码时可通过修改对应的文件解决,后面会细说

[E:\jenkins\tomcat9\webapps\ROOT]的部署已在[31]毫秒内完成
21-Aug-2023 23:46:48.074 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"]
21-Aug-2023 23:46:48.090 信息 [main] org.apache.catalina.startup.Catalina.start [6803]毫秒后服务器启动
21-Aug-2023 23:46:54.967 信息 [pool-6-thread-23] jenkins.InitReactorRunner$1.onAttained Prepared all plugins
21-Aug-2023 23:46:55.010 信息 [pool-6-thread-19] jenkins.InitReactorRunner$1.onAttained Started all plugins
21-Aug-2023 23:46:55.012 信息 [pool-6-thread-19] jenkins.InitReactorRunner$1.onAttained Augmented all extensions
21-Aug-2023 23:46:55.380 信息 [GitSCM.onLoaded] hudson.plugins.build_timeout.global.GlobalTimeOutConfiguration.load global timeout not set
21-Aug-2023 23:46:55.882 信息 [pool-6-thread-20] jenkins.InitReactorRunner$1.onAttained System config loaded
21-Aug-2023 23:46:55.882 信息 [pool-6-thread-20] jenkins.InitReactorRunner$1.onAttained System config adapted
21-Aug-2023 23:46:55.914 信息 [pool-6-thread-18] jenkins.InitReactorRunner$1.onAttained Loaded all jobs
21-Aug-2023 23:46:55.927 信息 [pool-6-thread-8] jenkins.InitReactorRunner$1.onAttained Configuration for all jobs updated
21-Aug-2023 23:46:55.984 信息 [pool-6-thread-24] jenkins.InitReactorRunner$1.onAttained Completed initialization
21-Aug-2023 23:46:56.018 信息 [Jenkins initialization thread] hudson.lifecycle.Lifecycle.onReady Jenkins is fully up and running

(7)打开浏览器,输入 127.0.0.1:8080 显示出汤姆猫网页,即表示安装成功。(8080是默认端口号,如果和其他软件端口冲突,可去配置文件中server.xml中修改端口号即可)
在这里插入图片描述

3.下载安装Jenkins

把Jenkins部署到tomcat的安装启动,这里简单介绍以下两种方法
一、第一种方法为直接下载 window下的安装文件(jenkins.msi)文件,双击安装到前面Tomcat的安装路径 E:\jenkins\tomcat9\webapps 的目录下,具体安装步骤如下所示。
(1)Jenkins下载链接:https://www.jenkins.io/download/,进入以上网址,选中稳定版本的window系统包,点击下载
在这里插入图片描述
(2)下载完成后会得到一个 jenkins.msi 安装包,双击打开安装到Tomcat 的 E:\jenkins\tomcat10\webapps 目录下
在这里插入图片描述
(3)安装 Jenkins 时,建议以独立身份安装和运行Jenkins,使用LocalSystem(Windows相当于root),这将授予Jenkins完全访问到你的机器和服务的权限;使用本地或域用户的Windows服务运行Jenkins,就相对安全得多。要使用本地或域用户运行 Jenkins 服务,需要指定域用户名和你想用来运行 Jenkins 的密码,单击测试凭据以测试你的域凭据,然后单击下一步。此处使用的账户是在 window11 系统下重新建立的一个window账户,具体原因可以参照后面的问题1。
在这里插入图片描述
(4)账户域凭据验证成功后,下一步会进入到端口的设定,这里默认使用的端口号是8080(但由于Tomcat默认的端口号也是8080,所以这里为了避免冲突,改成了另外一个未被占用的端口号:8868),设置好端口号后,点击下一步,进入JDK路径设置页,这里选中自己安装的JDK所在路径便可(这里要注意,Jenkins所支持的JDK版本只有 Java11 和 Java17 )
在这里插入图片描述
(5)选择完 JDK路径后,直接点击下一步,到达安装页面,点击安装
在这里插入图片描述
(6)安装完成后,点击 Finish
在这里插入图片描述
(7)安装完成后,可以直接通过浏览器访问 http://127.0.0.1:8868(除了直接通过浏览器访问外,这里还可以通过以下tomcat安装路径 E:\jenkins\tomcat9\bin 里的 startup.bat 文件启动,双击打开,通过浏览器访问 http://127.0.0.1:8080/Jenkins/ 便可启动Jenkins),访问成功后,会进入到解锁Jenkins页面,打开以上路径的文件,复制文件里面的内容到管理员密码框内,点击继续,进入安装插件页面,这里新手入门直接选择安装推荐的插件便可。
在这里插入图片描述
(8)点击安装推荐的插件后,进入插件安装页面,等待安装完成便会进入到 Jenkins 创建一个管理员账户的创建页面,这里自己按照个人喜好创建Jenkins账户便可,后续可通过此账户登陆 Jenkins,创建成功后点击保存并完成进入下一步
在这里插入图片描述
(9)创建完账户后便进入到 Jenkins 的URL设置界面,这里可根据自己实际使用情况设定,这里直接采用最简单的 http://127.0.0.1:8868 来实现基本的 Jenkins 运行便可,设置完后保存,进入安装完成界面,点击开始使用 Jenkins
在这里插入图片描述
二、第二种方法为直接下载 Jenkins的 jenkins.war 文件,剪切拷贝到tomcat的 webapps 文件目录下(E:\jenkins\tomcat9\webapps),具体安装步骤如下所示。
(1)访问 https://www.jenkins.io/download/,选择下载war文件,将jenkins.war文件拷贝到 E:\jenkins\tomcat9\webapps 目录下
在这里插入图片描述
(2)进入 E:\jenkins\tomcat9\bin文件夹,双击 startup.bat 启动tomcat,同时Jenkins会随着服务器一起启动,并且会在 E:\jenkins\tomcat9\webapps 目录下自动创建Jenkins目录
在这里插入图片描述
(3)启动tomcat后,使用浏览器访问 http://127.0.0.1:8080/便可进入tomcat页面,访问 http://127.0.0.1:8080/Jenkins/可进入Jenkins页面,登陆便可部署配置Jenkins
在这里插入图片描述
(4)使用过程中可能会设置到的内容,1、修改Jenkins的端口号,由于tomcat与Jenkins的默认端口号都是8080,所以这里可以更改下Jenkins或者tomcat的端口号,避免冲突;2、tomcat 登陆所需的权限账号和密码设置;3、tomcat 运行显示信息乱码;这里不做介绍,后面在讲解安装中遇到的问题时再做进一步的分析;4、更改 jenkins 存储路径等

三、创建一个简单的 Jenkins 任务

(1)配置好jenkins后,打开浏览器,进入以下链接 http://127.0.0.1:8868 ,使用管理员账户登陆Jenkins(同样,除了直接通过浏览器访问外,这里还可以通过以下tomcat安装路径 E:\jenkins\tomcat9\bin 里的 startup.bat 文件启动,双击打开,通过浏览器访问 http://127.0.0.1:8080/Jenkins/ 便可启动Jenkins,这里建议都使用这种方式进行下面的操作)
在这里插入图片描述
(2)创建一个构建任务
如下图所示,构建一个简单的Jenkins任务,点击创建任务,在弹出的选择任务类型界面上选择构建自由风格的软件项目,并输入项目名称;进入构建项目菜单,直接切换到Build构建选项,选择执行window批处理命令,在输入框里输入python -h,点击保存,进入下一步,点击立即构建,第一构建会生成#1的链接,点击进入链接,单击控制台输出,便可查看到构建日志
在这里插入图片描述
(3)运行 python 测试
创建 test_sample.py 的测试文件,输入以下练习用代码,保存后存放在 Sample task所在目录下(此目录可以通过 Jenkins 的控制台输出查看到具体路径)
在这里插入图片描述

# test_sample.py的代码内容如下
# add()函数
def add(a, b):
	return a + b

# 测试add()函数
def test_add():
	assert add(2, 4) == 5

进入 E:\jenkins\tomcat9\bin 目录,双击startup.bat文件运行 Tomcat,浏览器访问http://127.0.0.1:8080/jenkins/,进入Jenkins主页,进入 Jenkins 的 Simple task 首页,单击 Configure 构建选项,更改执行窗口批处理命令为 pytest test_sample.py,保存,点击build new 立即构建 #13 ,点击 #13 进入构建版本信息页面,点击控制台输出,便可查看到pytest运行测试用例生成的结果,如下图所示。
在这里插入图片描述
(4)Jenkins 插件安装
在安装 Jenkins 的过程中,选择的是安装默认的插件,若后续需要使用某些插件的功能,这时便需要安装插件了。如下所示,进入 Jenkins 主页,点击右上角的 Manage Jenkins -> 插件管理 -> 此时可以看到插件管理页,在这里我们可以安装、更新或卸载插件。
在这里插入图片描述

四、安装与配置Jenkins过程中遇到的问题

问题1:验证Jenkins账户凭据异常

(1)在使用电脑默认账户验证Jenkins账户凭据时弹出异常," 0x8007052e - Error logging on 用户名/用户名 OA… ",一直无法验证成功。
在这里插入图片描述
分析处理:查看Jenkins安装配置的教程,发现大概率是由于域用户无法获取到有效的服务登陆凭据,因而这里先尝试到用户权限分配添加登陆的账户,再重启Jenkins尝试域账户登陆。第一步:这里使用的系统为window11系统,找不到本地安全策略,这里需要先下载对应的本地安全策略,首先创建gpedit-enabler.bat文件,输入以下内容并保存:

@echo off 
pushd "%~dp0" 

dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt 
dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt 

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" 
pause

运行了 gpedit-enabler.bat 文件,使用win + R 唤出运行终端输入 secpol.msc -> 唤出本地安全策略,把用于登陆Jenkins的账户配置上去。配置步骤如下图所示,配置完毕后,重启电脑,尝试重新验证域用户,到此若是还不能验证通过,便需要进行下一步的操作。
在这里插入图片描述
第二步:一般来说完成第一步时问题就被解决了,但当我配置完用户权限分配时重新登陆,还是提示同样的错误,且把电脑自有的账户都配置了个遍都是无法验证通过。后续上网查询了一下,发现window11后,账户都是绑定微软账户的,怀疑是电脑默认的账户达不到域用户的标准,因而这里重新创建了一个本地账户(如下图所示,添加一个没有 Microsoft 账户的用户),并把此账户按照第一步配置好,作为服务登陆,再重启Jenkins,输入新建的账户进行验证,此时验证成功。
在这里插入图片描述
Jenkins官方安装配置的教程链接如下:https://www.jenkins.io/doc/book/installing/windows/#invalid-service-logon-credentials

问题2:Tomcat启动失败,点击一直闪退

(2)Tomcat启动失败,点击一直闪退,在按照以上的第一种方法安装好Jenkins后,双击点击 E:\jenkins\tomcat9\bin\startup.bat 启动Tomcat时,一直闪退,通过把startup.bat文件拖动到window运行终端运行后,可查看到以下异常信息提示

The CATALINA_HOME environment variable is not defined correctly
This environment variable is needed to run this program

分析处理:在检查了Tomcat、JDK和Jenkins的环境变量配置无异常后,发现可以尝试将Tomcat
所在文件夹的命名 apache-tomcat-10.1.11-windows-x64 这种冗长的名字更改为tomcat10这样简短的名字来解决此问题,更改tomcat文件夹命名后,重新配置环境变量CATALINA_HOME 为 E:\jenkins\tomcat9 便解决了此问题,但此处在重新运行时又遇到了别的闪退问题,在问题4分析处理。

问题3:更改tomcat文件夹的名称遇到程序占用

(3)遇到问题2时可以通过更改tomcat文件名解决闪退的问题,由于此处已经把Jenkins部署到了tomcat,所以在更改tomcat文件夹的名称时会遇到因为程序占用无法更改文件名称的问题。
在这里插入图片描述
分析处理:因为Jenkins一直在运行,所以导致无法更改名称。所以我们需要进入服务里面,把Jenkins服务暂停,暂停Jenkins服务后便可以更改tomcat的文件夹名称了。
在这里插入图片描述

问题4:CATALINA_HOME environment 异常闪退

(4)在更改完tomcat文件夹名称后,虽然不再报 “CATALINA_HOME environment” 的问题,但是双击运行点击 startup.bat 运行还是存在闪退的问题,把startup.bat文件拖动到window终端运行,获取到以下报错信息。

java.lang.ClassNotFoundException: org.apache.catalina.startup.Catalina

分析处理:确认了jdk,tomcat,Jenkins等版本无异常后,发现是文件夹里面没有给权限,把tomcat的文件夹都点击一边,弹出给权限的弹窗点击确认后,再次重新启动便不再闪退了
在这里插入图片描述

问题5:更改 Jenkins 执行路径

(5)在遇到问题2时,为了解决运行tomcat闪退的问题,更改了文件夹的名称,但更改了tomcat的文件夹名称后,出现无法再次打开Jenkins服务的问题。
分析处理:分析发现因为Jenkins最开始配置的执行路径变了,导致运行Jenkins出现了错误。当更改了tomcat的文件名时,Jenkins原来配置到tomcat的执行路径便也发生了改变,因而这里我们需要更改Jenkins的执行路径。
第一步:在 E:\jenkins\tomcat9\webapps里 找到Jenkins的配置文件 jenkins.xml ,打开进入编辑模式,更改执行路径为 “E:\jenkins\tomcat9\webapps\jenkins.war”

  <executable>E:\JDK\jdk-17.0.8_windows-x64_bin\bin\java.exe</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "E:\jenkins\tomcat9\webapps\jenkins.war" --httpPort=6688 --webroot="%LocalAppData%\Jenkins\war"</arguments>
  <!--

第二步:更改完执行路径还需要更改注册表里Jenkins的路径信息,Win + R 输入 regedit 调出注册表,修改注册表Jenkins里面的路径信息
在这里插入图片描述
更改完以上两处的路径信息后,重启电脑,重新启动Jenkins,Jenkins就可以正常打开了。

问题6:修改Tomcat和Jenkins端口号

(6)Tomcat和Jenkins端口号冲突,输入http://127.0.0.1:8080/ 进入的是jenkins的页面,而不是Tomcat的页面。
分析处理:使用默认配置安装tomcat和Jenkins时,默认的访问地址都是http://127.0.0.1:8080/,此时便会由于端口号冲突,导致在浏览器输入以上地址都只能访问到Jenkins主页,而无法进入到Tomcat的主页,因而这里的解决办法就是更改它们的端口号,避免冲突,这也是为什么在一开始安装Jenkins时需要手动更改Jenkins的端口号的原因,若安装完成后才发现端口号冲突,便只能通过修改后配置文件进行了。
1、更改Jenkins的配置文件:更改文件 jenkins.xml 里面的端口号,在 E:\jenkins\tomcat9\webapps 里找到Jenkins的配置文件 jenkins.xml ,打开进入编辑模式,更改端口为 “6688”,保存,重启笔记本,使用浏览器访问以下链接 http://127.0.0.1:6688/ 便可进入Jenkins主页。

  <executable>E:\JDK\jdk-17.0.8_windows-x64_bin\bin\java.exe</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "E:\jenkins\tomcat9\webapps\jenkins.war" --httpPort=6688 --webroot="%LocalAppData%\Jenkins\war"</arguments>
  <!--

2、更改Tomcat的配置文件:更改文件 server.xml 里面的端口号,在 E:\jenkins\tomcat9\conf\ 里找到 Tomcat 的配置文件 server.xml ,打开进入编辑模式,更改端口为 “8800”,保存,重启笔记本,使用浏览器访问以下链接 http://127.0.0.1:8800/ 便可进入 Tomcat 主页。

    <Connector port="8800" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncodeing="UTF-8"
               maxParameterCount="1000"
               />

问题7:点击startup.bat运行Tomcat,显示信息乱码

(7)在安装完成Tomcat后,双击tomcat的startup.bat运行Tomcat时,发现终端显示的信息很多乱码。
分析处理:主要原因是由于编解码不一样导致,首先,打开tomcat的E:\jenkins\tomcat9\conf\server.xml,给它增加显示的编码方式,如下所示,增加了 URIEncodeing=“UTF-8” 的语句
在这里插入图片描述
然后将日志的编码格式也修改一下,打开tomcat的E:\jenkins\tomcat9\conf\logging.properties,如下所示,增加了 java.util.logging.ConsoleHandler.encoding = GBK 语句
在这里插入图片描述
更改完成后,重启tomcat便可解决乱码问题。

问题8:因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间

(8)在运行tomcat的时候出现tomcat提示缓存空间不足的警告。
分析处理:打开tomcat的E:\jenkins\tomcat9\conf\context.xml,给它增加如下图的语句,并保存重启tomcat。
在这里插入图片描述

问题9:使用浏览器访问Jenkins,网页提示404

(9)刚开始把Jenkins配置到tomcat时,在访问浏览器 http://127.0.0.1:8080/Jenkins/ 时提示404的错误。
在这里插入图片描述
分析处理:此问题主要是由于版本不适配导致,此处最开始搭建的环境版本信息分别为Java17、Tomcat-10.1.7、Jenkins 2.346.3 LTS,这里把Tomcat的版本更换为 Tomcat-9.0.79 后,重新配置Jenkins便解决了此问题。

问题10:创建 Tomcat 管理器账户

浏览器访问 http://127.0.0.1:8080/,点击如图所示的Tomcat主页的管理器时,在登陆Tomcat管理器时弹窗提示需要输入账号。
在这里插入图片描述
分析处理:当出现输入账号界面时,点击取消会出现以下页面信息,通过提示的信息我们可以知道在第一次登陆tomcat的管理器时需要在tomcat-users.xml 文件里增加登陆账号。
在这里插入图片描述
因为我们根据提示,更改 E:\jenkins\tomcat9\conf 里的 tomcat-users.xml 文件,添加以下信息

<role rolename="manager-gui-123"/>
<user username="tomcat" password="s3c34dt" roles="manager-gui-123"/>

添加完信息后的 tomcat-users.xml 文件如下所示
在这里插入图片描述
保存成功后,再次刷新 http://127.0.0.1:8080/ 页面,再次点击登陆管理器,使用以上添加的账户登陆(用户名:tomcat 密码:s3cret),登陆后可进入管理器页面。在这里插入图片描述


五、总结

以上就是本文要讲的内容,本文仅仅简单介绍了在 window 系统下, tomcat + Jenkins 的基本部署方法和简单任务的实现,而 Jenkins 提供的功能远不止于此,通过 Jenkins 结合 git 仓库能实现对软件项目的持续集成和自动化测试,感兴趣的可以自行深入研究。

;