三、jenkins使用tomcat部署项目

一、安装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配置文件如下

bash 复制代码
[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的账号和密码的。

bash 复制代码
[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,下面写个简单的打印(只是打印,还没写拉取配置的代码)

bash 复制代码
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一下,可以打印。

脚本式案例
bash 复制代码
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,看看成功不。成功

相关推荐
*老工具人了*34 分钟前
Terraform整合到GitLab+Jenkins工具链
gitlab·jenkins·terraform
wanhengidc36 分钟前
服务器内存不足会造成哪些影响?
运维·服务器·网络·游戏·智能手机
广州腾科助你拿下华为认证40 分钟前
华为HICE云计算的含金量高吗?
运维·服务器·hcie证书
码畜也有梦想2 小时前
Maven中optional的作用
java·jenkins·maven
学c语言的枫子2 小时前
Linux文件IO——系统IO
linux·运维·服务器
格林威2 小时前
短波红外相机在机器视觉检测方向的应用
运维·人工智能·深度学习·数码相机·计算机视觉·视觉检测
tjjingpan2 小时前
mosdns缓存dns服务器配置记录
运维·服务器·缓存
深圳衡益科技2 小时前
温湿度传感器如何守护工业制造?
运维·服务器
知北游天3 小时前
Linux网络:初识网络
linux·运维·网络
染指11103 小时前
13.渗透-.Linux基础命令(五)-用户管理(修改用户密码)
linux·运维·服务器·linux命令