服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Tomcat - Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

2021-09-13 17:31码猿手 Tomcat

这篇文章主要介绍了Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一.背景

  公司的项目一直手动maven打包、上传服务器、关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的jenkins插件一键自动部署,那更省时省力。

  下面是一个简单的发布tomcat的shell脚本,执行下面脚本的前提是要在服务器中安装了git、maven

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 先关闭tomcat进程
kill -9 `ps aux|grep tomcat|grep -v 'grep'| awk 'nr==1{print $2}'`
# 切换到项目存放位置
cd nxyyprojectsource/nxyy
# git拉取最新代码
git pull xxxx
# 切换到项目下面的代码存放位置
cd nxyy
# maven打包
mvn clean
mvn install -dskiptests
# 将war包放到tomcat下
cd
cp nxyyprojectsource/nxyy/nxyy/target/nxyy.war /home/tomcat/webapps
# 开启tomcat
cd /home/tomcat/bin
./startup.sh
# 查看日志
tail -f ../logs/catalina.out

  每次git拉取时,都需要密码,进行下面的配置后,只需要在第一次输入密码后会永久保存到服务器中,下次再git拷贝/拉取时就不需要输入密码了:

git config --global credential.helper store

  如果想清除账号和密码,输入:

git config --global credential.helper reset

  如果想临时存储(默认15分钟),输入:

git config --global credential.helper cache

  单独对某个项目免密,在https链接里加入username:password

git remote add origin https://username:password@xxx.git

  上面这些配置保存在.git/config里。

二.jenkins的安装/配置/热部署/脚本tomcat重启

下载安装包jenkins.war;在安装包根路径下,运行命令java -jar jenkins.war --httpport=8080(linux环境、windows环境都一样),运行后有一个密码,需要登录时使用:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

打开浏览器进入链接http://ip:8080,进入插件安装选择,这里建议选择,推荐安装的插件,保证基本常用的功能可以使用;选择后,进入插件安装页面,有些插件安装失败,可以点击到后面的再次安装:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

设置初始用户和密码,为下次登录时使用:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

进入系统,安装完成:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

注意,如果还是进入不了系统,需要稍等一下,或者刷新页面,如果还是进入不了,需要重新启动jenkinds服务器,在启动首页url后面加上restart就可以了【重启:http://ip:8080/restart】;如果输入默认密码之后,一直卡住问题:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

在$jenkins_home/hudson.model.updatecenter.xml文件中,默认内容如下:

?
1
2
3
4
5
6
7
<?xml version='1.0' encoding='utf-8'?>
 <sites>
 <site>
 <id>default</id>
 <url>http://updates.jenkins-ci.org/update-center.json</url>
 </site>
</sites>

这个地址在外国的服务器,因为墙的原因,下载初始化界面所需插件不了,就一直处于等待状态,把url改为http://mirror.xmission.com/jenkins/updates/update-center.json就解决了进行系统系统配置设置jenkins的访问路径,当然,这个路径在创建用户名之后会出现:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

设置插件安装源:插件管理 -> 高级,http://mirror.xmission.com/jenkins/updates/current/update-center.json

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

进行系统管理的全局工具配置,maven、jdk、git的配置:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

配置完后进行项目的搭建,选择新建任务:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

在进行项目信息配置前,需要一些凭证credentials信息,比如git的用户名和密码、tomcat用户的用户名和密码:系统管理 -> 凭据(manage credentials)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

需要tomcat的用户名和密码,是为了让jenkins可以远程发布tomcat,在tomcat的conf下tomcat-users.xml里面配置的:tomcat远程发布需要修改tomcat-users.xml、context.xml(下文构建遇到的坑第5点)、manager.xml(下文构建遇到的坑第6点

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<tomcat-users xmlns="http://tomcat.apache.org/xml"
 
    xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
 
    xsi:schemalocation="http://tomcat.apache.org/xml tomcat-users.xsd"
 
    version="1.0">
 
 <role rolename="manager-gui"/>
 <role rolename="manager-script"/>
 <role rolename="manager-jmx"/>
 <role rolename="manager-status"/>
 <role rolename="admin-gui"/>
 <user username="用户名" password="密码" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/>
</tomcat-users>

进行项目信息的配置,在配置完进行构建,tomcat必须在服务器中是启动状态:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

上面是tomcat热部署,下面进行tomcat的重启执行项目:先安装插件publish over ssh,进行信息配置:系统管理 -> 信息配置 ->publish over ssh

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

构建的配置前需要创建一个重启tomcat的脚本:vi tomcat.sh,然后赋予执行权限chmod 777 tomcat.sh

#这里需要加上java_home的配置,虽然在本地的环境变量中已经配置了,但是远程调用的时候,还是需要配上的,否则执行脚本出错。
export java_home=/usr/java/jdk1.8.0_141-cloudera
# tomcat的位置
tomcat_home=/home/tomcat-dev
#【3.1】 停止tomcat变量
shutdown=$tomcat_home/bin/shutdown.sh
#【3.2】 启动tomcat变量
starttomcat=$tomcat_home/bin/startup.sh
#【3.3】 删除所有项目文件包括war包和war解压后的文件 如果是局部发布这句不需要 这只是正对jenkins整个war发布
rm -rf /home/tomcat-dev/webapps/tsisapp*

#得到进程id 这里也可以简写 如果你ps -ef|grep 项目名称 可以带出pid 那么可以直接写成这样
#之前为什么写那么长 是因为在用jenkins调用脚本的时候,也会带出jenkins调用脚本的那个进程 这样kill -9 就会killjenkins进程 导致一建发布中断
#所以这里一直写到了conf文件夹目录
#如果不需要用到jenkins可以用下面简洁版 得出pid命令
#pid=`ps -ef |grep 项目名称  |grep -v grep | awk '{print $2}'`
#【3.4】 获取进程id
pid=`ps -ef |grep /home/tomcat-dev/conf |grep -v grep | awk '{print $2}'`
if [ ! "$pid" ];then # 这里判断tomcat进程是否存在
    echo "进程不存在"
else
    echo "进程存在 杀死进程pid:$pid"
    kill -9 $pid
fi

#【3.5】启动项目
$starttomcat  
echo "启动项目"

构建:post steps选择send files or execute commands over ssh,下面的构建后操作 -> deploy war/ear to a container 就不需要了:

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

三.构建遇到的坑

如果没有构建一个maven项目,在插件中查找后进行安装:maven integration plugin

在构建后如果没有deploy war/ear to a container,在插件中查找后进行安装:deploy to container plugin

出现下面的错误:

[error] no goals have been specified for this build. you must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [help 1]

解决办法:在pom.xml的<build>标签中添加<defaultgoal>install</defaultgoal>

出现下面的错误:org.codehaus.cargo.container.containerexception: failed to deploy 或org.codehaus.cargo.container.containerexception: the [cargo.remote.username] and [cargo.remote.password] properties are mandatory and need to be defined in your configuration

解决办法:在pom.xml的<build>标签中的<plugins>中添加

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<plugin>
    <groupid>org.codehaus.cargo</groupid>
    <artifactid>cargo-maven2-plugin</artifactid>
    <version>1.4.9</version>
    <configuration>
     <container>
      <!-- 容器版本名称-->
      <containerid>tomcat 9.x</containerid>
      <type>remote</type>
     </container>
     <configuration>
      <type>runtime</type>
      <properties>
       <!-- tomcat管理界面-->
       <cargo.remote.uri>http://ip:8888/manager/text</cargo.remote.uri>
       <!-- tomcat管理界面用户名和密码-->
       <cargo.remote.username>用户名</cargo.remote.username>
       <cargo.remote.password>密码</cargo.remote.password>
      </properties>
     </configuration>
    </configuration>
   </plugin>

出现下面的问题:caused by: org.codehaus.cargo.container.tomcat.internal.tomcatmanagerexception: the username you provided is not allowed to use the text-based tomcat manager
解决办法:到tomcat的 /webapps/manager/meta_inf/context.xml文件,将文件中对访问的来源受限设置注释

?
1
2
3
4
5
6
7
<context antiresourcelocking="false" privileged="true" >
<!--
 <valve classname="org.apache.catalina.valves.remoteaddrvalve"
   allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
--> //注释掉即可
 <manager sessionattributevalueclassnamefilter="java\.lang\.(?:boolean|integer|long|number|string)|org\.apache\.catalina\.filters\.csrfpreventionfilter\$lrucache(?:\$1)?|java\.util\.(?:linked)?hashmap"/>
</context>

tomcat远程连接出现403拒绝,在conf/catalina/localhost下添加manager.xml

?
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<context privileged="true" antiresourcelocking="false"
   docbase="${catalina.home}/webapps/manager">
    <valve classname="org.apache.catalina.valves.remoteaddrvalve" allow="^.*$" />
</context>

idea结合jenkins插件进行远程发布,在crumb data通过http://ip:8080/crumbissuer/api/xml?tree=crumb#获取填入时,出现csrf enabled -> missing or bad crumb data

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

通过搜索网上解决方案,大多都是说开启csrf服务,

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

但还是无法解决该问题,解决办法:点击用户名 -> 设置 -> api token -> 当前 token,通过token名生成token,代替上面的用户名和密码,最后终于成功了

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)Jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)

到此这篇关于jenkins+tomcat自动发布的热部署/重启及遇到的问题解决办法(推荐)的文章就介绍到这了,更多相关jenkins tomcat 热部署内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/huangrenhui/p/13272225.html

延伸 · 阅读

精彩推荐
  • Tomcat解决Tomcat的maxPostSize属性的配置需要注意的问题

    解决Tomcat的maxPostSize属性的配置需要注意的问题

    这篇文章主要介绍了解决Tomcat的maxPostSize属性的配置需要注意的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    life is wonderful12012021-09-13
  • TomcatEclipse创建tomcat实现过程原理详解

    Eclipse创建tomcat实现过程原理详解

    这篇文章主要介绍了Eclipse创建tomcat实现过程原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    海绵般汲取11642021-09-16
  • TomcatTomcat服务器的安全设置

    Tomcat服务器的安全设置

    tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐。不过,在默认配置下其存在一定的安...

    IT专家网9002021-08-03
  • Tomcat一次tomcat源码启动控制台中文乱码的调试过程记录

    一次tomcat源码启动控制台中文乱码的调试过程记录

    平时在使用tomcat做一些服务的时候经常遇到各种乱码问题,下面这篇文章主要给大家介绍了一次tomcat源码启动控制台中文乱码的调试过程,需要的朋友可以...

    zhoutaoping199211852021-09-24
  • TomcatTomcat CentOS安装实现过程图解

    Tomcat CentOS安装实现过程图解

    这篇文章主要介绍了Tomcat CentOS安装实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    agrin5842021-09-15
  • TomcatTomcat整体结构简单介绍

    Tomcat整体结构简单介绍

    这篇文章主要介绍了Tomcat整体结构简单介绍,Tomcat的本质是一个Servlet容器。一个Servlet能做的事情是:处理请求资源,并为客户端填充response对象,需要的朋友...

    叫我田露也行12302021-09-07
  • TomcatTomcat安装配置方法图文教程

    Tomcat安装配置方法图文教程

    这篇文章主要为大家详细介绍了Tomcat安装配置方法图文教程,java环境变量如何配置,Eclipse安装配置方法图文教程 ,为大家分享了三个教程,感兴趣的小伙...

    Tomcat教程网13292021-08-11
  • Tomcat如何查看tomcat的控制台输出的方法

    如何查看tomcat的控制台输出的方法

    这篇文章主要介绍了如何查看tomcat的控制台输出的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    CaiCaiNeo11932021-08-29