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

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

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

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

一、背景

公司的项目已经被maven手动打包,上传到服务器,关闭/打开tomcat。整个过程耗时耗力。虽然所有的流程都可以用shell脚本一次性解决,但是如果能通过idea的Jenkins插件一键自动部署,那就更省时省力了。

下面是一个发布tomcat的简单shell脚本。执行以下脚本的前提是在服务器中安装git和maven。

#先关闭tomcat进程 kill-9`psaux|greptomcat|grep-v'grep'|awk'NR==1{print$2}'` #切换到项目存放位置 cdnxyyProjectSource/NXYY #git拉取最新代码 gitpullxxxx #切换到项目下面的代码存放位置 cdnxyy #maven打包 mvnclean mvninstall-DskipTests #将war包放到tomcat下 cd cpnxyyProjectSource/NXYY/nxyy/target/nxyy.war/home/tomcat/webapps #开启tomcat cd/home/tomcat/bin ./startup.sh #查看日志 tail-f../logs/catalina.out

每次拉git都需要密码。完成以下配置后,您只需首次输入密码,该密码将永久保存到服务器。下次复制/提取git时,您不需要输入密码:

git配置-全局凭据.helper存储

如果您想清除您的帐户和密码,请输入:

git配置-全局凭据。助手重置

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

git配置-全局凭据.助手缓存

保持一个单独的项目机密,并在https链接中添加用户名:密码。

git远程添加原点https://用户名:password@xxx.git

上述配置保存在中。git/config。

二。Jenkins安装/配置/热部署/脚本tomcat重启

下载安装包jenkins.war;在安装包的根路径下,运行命令Java-jarJenkins.war-httpport=8080(Linux和Windows环境都是一样的)。运行后,登录时需要使用一个密码:

打开浏览器进入链接http://ip:8080,进入插件安装选项。这里建议选择安装插件,保证基本常用功能都能使用;选择后进入插件安装页面,部分插件安装失败,可以在后面再次点击安装:

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

进入系统并完成安装:

注意,如果还是进不了系统,需要稍等片刻或者刷新页面。如果还是无法进入系统,就需要重启jenkinds服务器。只需在启动首页的网址后面加上restart【restart:http://IP:8080/restart】;如果输入默认密码后问题仍然存在:

在$Jenkins_home/Hudson.model.updatecenter.XML文件中,默认内容如下:

<?xmlversion='1.0'encoding='UTF-8'?> <sites> <site> <id>default</id> <url>http://updates.jenkins-ci.org/update-center.json</url> </site> </sites>

外地这个地址的服务器因为墙的原因无法下载初始化界面所需的插件,所以一直处于等待状态。将网址改为http://mirror.xmission.com/Jenkins/updates/update-center.JSON,解决了Jenkins对于系统配置的访问路径。当然,该路径将在创建用户名后出现:

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

系统管理的全球工具配置,maven、JDK和Git的配置:

配置完成后,构建项目,并选择NewTask:

在配置项目信息之前,你需要一些凭证信息,比如git用户名和密码,tomcat用户名和密码:系统管理->凭证(管理凭证)

tomcat的用户名和密码是必需的,以便Jenkins可以远程发布tomcat,这是在tomcat的conf下的tomcat-users.xml中配置的:Tomcat远程发布需要修改tomcat-users.xml、context.xml(在下面的构造中遇到的pit的第5点)和manager.xml(在下面的构造中遇到的pit的第6点)

<tomcat-usersxmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xmltomcat-users.xsd" version="1.0"> <rolerolename="manager-gui"/> <rolerolename="manager-script"/> <rolerolename="manager-jmx"/> <rolerolename="manager-status"/> <rolerolename="admin-gui"/> <userusername="用户名"password="密码"roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/> </tomcat-users>

配置项目信息,并在配置后进行构建。tomcat必须在服务器中启动:

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

在构建的配置之前,需要创建一个脚本来重新启动tomcat:vittomcat.sh,然后授予执行权限chmod777tomcat.sh。

#这里需要添加JAVA_HOME的配置。虽然已经在本地环境变量中配置了,但是远程调用时还是需要匹配,否则执行脚本会出错。[/Br/] ExportJava_home=/usr/Java/JDK1.8.0_141-Cloudera[/Br/] #Tomcat的位置[/Br/] Tomcat_home=/home/TomcatBr/] shutdown=$Tomcat_home/bin/shutdown.sh[/Br/] #[3.2]StartTomcat变量[/Br/] StartTomcat=$1[3.3]删除所有项目文件,包括war包和从war中提取的文件。如果是局部分布,这句话就没必要了。刚刚分发给詹金斯的全战
RM-RF/home/Tomcat-dev/webapps/tsisapp*

#获取进程ID。这里也可以缩写。如果你的ps-ef|grep项目名能把PID带出来,可以直接写成这样
#为什么之前要这么久?因为用jenkins调用脚本的时候也会带出jenkins调用脚本的进程,这样kill-9就会杀死jenkins进程并导致第一个建筑的释放中断
#所以一直写到conf文件夹目录
#如果不需要jenkins,可以用下面的简洁版得到PID命令
#PID=`Ps-ef|grep项目名|grep-vgrep|aw"$PID"];然后#在这里判断TOMCAT进程是否存在
echo“进程不存在”
else echo“进程存在killprocessPID:$PID”
kill

#[3.5]启动项目
$StartTomcat
echo“启动项目”

构建:Post步骤选择通过SSH发送文件或执行命令,并且不需要以下构建后 *** 作-->:将war/ear部署到容器:

三。建坑遇到

如果您没有构建maven项目,请在插件中查找并安装它:Maven集成插件

如果在构造之后没有将war/ear部署到容器,那么在插件中查找并安装它:DeploytocontainerPlugin。

发生了以下错误:

[错误]没有为此版本指定目标。您必须指定有效的生命周期阶段或目标,格式为<插件前缀>:<目标>或者<插件组id>:<plugin-artifact-id>;[:<;插件版本>]:<;目标>。可用的生命周期阶段有:验证、初始化、生成源、处理源、生成资源、处理资源、编译、处理类、生成测试源、处理测试源、生成测试资源、处理测试资源、测试编译、处理测试类、测试、准备打包、打包、预集成测试、集成测试、集成后测试、验证、安装、部署、预清理、清理、后清理、预站点、站点、后站点、站点部署。->;[帮助1]

解决方法:在pom.xml中;增加

出现以下错误:org.codeHaus.cargo.container.container异常:无法部署ororg.codeHaus.cargo.container.container异常:[cargo.remote.username]和[cargo.remote.password]属性是必需的,需要在您的配置中定义

解决方法:在pom.xml中;

<plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.4.9</version> <configuration> <container> <!--容器版本名称--> <containerId>Tomcat9.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>

出现以下问题:原因:org.codeHaus.cargo.container.Tomcat.internal.tomcatmanagerexception:您提供的用户名不允许使用基于文本的。TomcatManager
解决方案:转到Tomcat的/webapps/Manager/meta_INF/context.XML文件,在文件中注释限制访问设置。

<ContextantiResourceLocking="false"privileged="true"> <!-- <ValveclassName="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/> -->//注释掉即可 <ManagersessionAttributeValueClassNameFilter="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。

<?xmlversion="1.0"encoding="UTF-8"?> <Contextprivileged="true"antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <ValveclassName="org.apache.catalina.valves.RemoteAddrValve"allow="^.*$"/> </Context>

Idea结合Jenkins插件远程分发,通过http://IP:8080/CrumbIssuer/API/XML在Crumb数据中分发?Tree=crumb#csrfenabled->在获得馅料时出现。缺失或损坏的碎屑数据

通过搜索网上的解决方案,大部分都是关于开通CSRF服务的。

但还是解决不了问题。解决方法:点击用户名->:设置->;API令牌->;目前令牌是通过令牌名生成的,而不是上面的用户名和密码,最后成功了。

就是这样。Jenkins+tomcat发布的这篇关于热部署/自动重启的文章以及遇到问题的解决方案(推荐)在这里已经介绍过了。有关Jenkinstomcat热部署的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/774454.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-03
下一篇2022-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存