三、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,看看成功不。成功

相关推荐
一心0925 小时前
ubuntu 20.04.6 sudo 源码包在线升级到1.9.17p1
运维·ubuntu·sudo·漏洞升级
好好学习啊天天向上5 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
ldj20205 小时前
Jenkins 部署脚本
jenkins
IT乌鸦坐飞机6 小时前
nignx+Tomcat+NFS负载均衡加共享储存服务脚本
tomcat·centos7·nfs·nignx
代码老y6 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程6 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
你想考研啊9 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks9 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
JAVA学习通9 小时前
Mybatis--动态SQL
sql·tomcat·mybatis