一、安装tomcat
tomcat本来应该是第3台服务器的(第一台:gitlab,第二台:jenkins,第三台:tomcat),我这里资源有限,就把tomcat安装jenkins服务器了。
#解压tocmcat
[root@bogon home]#tar -zxvf apache-tomcat-9.0.80.tar.gz
#查看是否解压成功
[root@bogon home]#ll
drwxr-xr-x. 9 root root 220 7月 2 10:06 apache-tomcat-9.0.80
-rw-r--r--. 1 root root 11692853 7月 2 10:04 apache-tomcat-9.0.80.tar.gz
#查看是否可以启动
[root@bogon home]# cd apache-tomcat-9.0.80/bin/
[root@bogon bin]# ./startup.sh
Using CATALINA_BASE: /home/apache-tomcat-9.0.80
Using CATALINA_HOME: /home/apache-tomcat-9.0.80
Using CATALINA_TMPDIR: /home/apache-tomcat-9.0.80/temp
Using JRE_HOME: /usr/lib/jvm/java-11-openjdk
Using CLASSPATH: /home/apache-tomcat-9.0.80/bin/bootstrap.jar:/home/apache-tomcat-9.0.80/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
安装完tomcat后,jenkins需要使用到tomcat的账户,给tomcat传输war包。所以我们下面配置
tomcat账号。如果不配置,启动tomcat后,点击manager webapp是无法访问
看,无法访问吧:
二、配置tomcat
(1)修改tomcat-users.xml
配置tomcat用户,这里tomcat的账号密码均是:tomcat
vi /home/apache-tomcat-9.0.80/conf/tomcat-users.xml配置文件如下
[root@localhost conf]# vi /home/apache-tomcat-9.0.80/conf/tomcat-users.xml
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
(2)修改context.xml文件
注释这一块,具体干嘛不清楚,待研究,不过目的还是配置tomcat的账号和密码的。
[root@localhost META-INF]# vi /home/apache-tomcat-9.0.80/webapps/manager/META-INF/context.xml
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
(3)重启tomcat
重启tomcat后,在访问tomcat的manager
可以访问了
三、jenkins的war包部署项目
现在我们使用jenkins、tomcat2者结合,把war包启动。但是Jenkins中自动构建项目的类型有很多,常用的有以下三种:
*自由风格软件项目(FreeStyleProject)
*Maven项目 (Maven Project)
*流水线项目(Pipeline Prgject)|
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:教程里老师推荐使用流水线类型,因为灵活度非常高)
(1)自由风格方式部署
拉取代码
1、之前我们已经写过如何拉取代码和打包了。不再写了。
注意:因为使用的是自由风格的方式部署,创建项目时要选择自动项目,就是自带的那一个。
项目创建好了
安装插件
2、首先需要jenkins安装一个插件 :Deploy to container
配置插件的使用
插件安装完成后,进入项目
点击构建后操作
设置war包路径
注意:截图里的war/ear files路径错了,不用写全路径,因为已经是这个项目了,直接这么写:target/*.war
点击添加,设置tomcat(我tomcat在本地)
最后build一下,看日志
看日志如下就是可以了
然后刷新查看tomcat
注意:这个时候时候已经把war包放在tomcat的webapps目录下了。
然后点击项目名字,发现项目已经启动了
测试人员直接访问该地址就可以测试了。开发人员提交代码到gitlab后,测试人员自己点build,就会自动更新了。
测试开发人员修改代码,然后提交到gitlab。点击jenkins的build看看代码是否自动更新且部署成功。
然后build一下
刷新项目地址,发现已经是最新代码了。
(2)maven项目构建类型方式部署
安装插件
首先我们先安装一个插件:Maven Integration
创建项目
获取代码
拉取代码和自由风格方式一样的
然后build,看看有没有拉取成功,看一下服务器有没有对用项目名就行
没问题,拉成功了
打包
这里和自由风格不同,图里写错字了。
让tomcat加载该war包
build一下,看日志
看tomcat
访问项目
修改代码,build
修改代码。提交
build后查看项目
查看控制台日志没问题
看项目,也更新了。
(3)流水线方式部署
流水线(pipeline)直接写代码即可实现拉取代码、打包、同步tomcat启动,这个代码也是可以自动生成,整体来说没有上面那2个配置的地方多,流水线只在一个地方写代码即可。
流水线(pipeline)的好处:
代码:peline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。
多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功
能。
可扩展:Pipeline插件支持其DSL的自定义扩展,以及与其他插件集成的多个选项。
如何创建Jenkins Pipeline呢?
Pipeline脚本是由Groovy语言实现的,但是我们没必要单独去学习Groovy
Pipeline支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
Pipeline也有两种创建方法:可以直接在Jenkins的WebUI界面中输入脚本;也可以通过创建一个
Jenkinsfile脚本文件放入项目源码库中(一般我们都推荐在Jenkins中直接从源代码控制(SCM)中直接载入Jenkinsfile Pipeline 这种方法)。
安装插件
安装pipeline插件
遇到的坑:我安装该插件,提示我高版本的jenkins才可以下载该插件。然后我吭哧吭哧把jenkins升级为了2.504.3
(ps:上面pipeline插件里的部分子插件安装失败了,版本太低了,我先试试可以走通流水线项目不,答:走不通,我升级可jenkins版本到2.504.3)
创建一个流水线项目
尝试声明式打印流程
发现流水线和上面2个相比,不需要找配置git、不需要配配置tomcat的地方,直接在这里写配置git、配置tomcat,下面写个简单的打印(只是打印,还没写拉取配置的代码)
pipeline {
agent any
stages {
stage('pull code') {
steps {
echo '----------------Hello World1'
}
}
stage('build project') {
steps {
echo '----------------------Hello World2'
}
}
stage('public project') {
steps {
echo '----------------------------Hello World3'
}
}
}
}
build一下,可以打印。
脚本式案例
node {
def mvnHome
stage('pull code') { // for display purposes
echo '拉取'
}
stage('Build project') {
// Run the maven build
withEnv(["MVN_HOME=$mvnHome"]) {
echo '生成'
}
}
stage('publish project') {
echo '执行'
}
}
然后build一下,发现是有日志打印的。
声明式案例
声明式实战
1拉取代码
上面“生成流水线脚本”后,直接拉取代码,看看能否拉取
看日志拉取成功
2打包
生成打包脚本,放进去
build一下,看看日志,没报错,然后服务器也生成了war包
3远程部署到tomcat
build一下,看看日志,没问题
提交代码用流水线在build一下,看看项目是不是更新
build一下,项目更新了,流水线部署没问题,且完成。
4,把构建代码放在idea里
即使jenkins崩了,idea里也有该代码。同时也实现了版本控制。
5把构架命令放在idea
打开idea,创建一个默认名为Jenkinsfile的文件
设置jenkins
build,看看成功不。成功