软件在开发的过程中,基本每天都会被集成一次,也就是说软件每时每刻都在发生变化,如果能在每次发生集成都通过自动化构建(包括编译、发布、自动化测试)来验证,便能尽早地发现集成错误,让团队得以更快地开发内聚的软件。而使用 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并构建简单任务
(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)
(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.onAttained Prepared all plugins 21-Aug-2023 23:46:55.010 信息 [pool-6-thread-19] jenkins.InitReactorRunner.onAttained Started all plugins 21-Aug-2023 23:46:55.012 信息 [pool-6-thread-19] jenkins.InitReactorRunner.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.onAttained System config loaded 21-Aug-2023 23:46:55.882 信息 [pool-6-thread-20] jenkins.InitReactorRunner.onAttained System config adapted 21-Aug-2023 23:46:55.914 信息 [pool-6-thread-18] jenkins.InitReactorRunner.onAttained Loaded all jobs 21-Aug-2023 23:46:55.927 信息 [pool-6-thread-8] jenkins.InitReactorRunner.onAttained Configuration for all jobs updated 21-Aug-2023 23:46:55.984 信息 [pool-6-thread-24] jenkins.InitReactorRunner.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中修改端口号即可)
把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 存储路径等
(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 -> 插件管理 -> 此时可以看到插件管理页,在这里我们可以安装、更新或卸载插件。
(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启动失败,点击一直闪退,在按照以上的第一种方法安装好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)遇到问题2时可以通过更改tomcat文件名解决闪退的问题,由于此处已经把Jenkins部署到了tomcat,所以在更改tomcat文件夹的名称时会遇到因为程序占用无法更改文件名称的问题。
分析处理:因为Jenkins一直在运行,所以导致无法更改名称。所以我们需要进入服务里面,把Jenkins服务暂停,暂停Jenkins服务后便可以更改tomcat的文件夹名称了。
(4)在更改完tomcat文件夹名称后,虽然不再报 “CATALINA_HOME environment” 的问题,但是双击运行点击 startup.bat 运行还是存在闪退的问题,把startup.bat文件拖动到window终端运行,获取到以下报错信息。
java.lang.ClassNotFoundException: org.apache.catalina.startup.Catalina
分析处理:确认了jdk,tomcat,Jenkins等版本无异常后,发现是文件夹里面没有给权限,把tomcat的文件夹都点击一边,弹出给权限的弹窗点击确认后,再次重新启动便不再闪退了
(5)在遇到问题2时,为了解决运行tomcat闪退的问题,更改了文件夹的名称,但更改了tomcat的文件夹名称后,出现无法再次打开Jenkins服务的问题。
分析处理:分析发现因为Jenkins最开始配置的执行路径变了,导致运行Jenkins出现了错误。当更改了tomcat的文件名时,Jenkins原来配置到tomcat的执行路径便也发生了改变,因而这里我们需要更改Jenkins的执行路径。
第一步:在 E:\jenkins\tomcat9\webapps里 找到Jenkins的配置文件 jenkins.xml ,打开进入编辑模式,更改执行路径为 “E:\jenkins\tomcat9\webapps\jenkins.war”
E:\JDK\jdk-17.0.8_windows-x64_bin\bin\java.exe -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "E:\jenkins\tomcat9\webapps\jenkins.war" --httpPort=6688 --webroot="%LocalAppData%\Jenkins\war"