詹金斯自动部署tomcat 7

Posted

技术标签:

【中文标题】詹金斯自动部署tomcat 7【英文标题】:Jenkins auto deploy tomcat 7 【发布时间】:2012-03-05 20:10:45 【问题描述】:

我们正在尝试使用 Jenkins 部署一个战争文件,但似乎没有任何反应。

项目构建成功,我们正在使用 Jenkins 部署插件。它配置有以下选项:

发布步骤设置为“无论构建结果如何都运行”。

我已检查凭据是否正确,因为我可以在浏览器中访问管理器页面。

这是 Jenkins (Maven) 输出的最后一部分:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:24.506s
[INFO] Finished at: Tue Feb 14 12:10:45 UTC 2012
[INFO] Final Memory: 22M/52M
[INFO] ------------------------------------------------------------------------
channel stopped
Finished: SUCCESS

我还可以将 WAR/EAR 文件更改为不存在的文件,它不会给我错误,这有点奇怪。我在这里做错了什么?

【问题讨论】:

您没有收到与插件相关的任何条消息(无论是否异常)? 理论上 - 没有。它使用Cargo,所以应该很简单。如果出现问题,我仍然通常会在我的工作日志中得到一些东西......通常是这样的:错误:发布者 hudson.plugins.deploy.DeployPublisher 由于异常而中止 好的。不过,感谢您的时间和精力! 我之前也遇到过同样的问题。这是由于war文件路径错误造成的。如果你有workspace/YourProjectname/target/warfile.war 之类的文件夹。路径只能是 target/warfile.war。 @syamimi 谢谢,它帮助了我。但是我想知道如果tomcat有不同的主机,即托管多个站点,在这种情况下如何告诉tomcat部署到哪个主机? 【参考方案1】:

为配置 Jenkins 页面的用户保留角色 manager-gui,admin-gui

例子:-

 <tomcat-users>

   <user username="uname" password="pword" roles="manager-gui,admin-gui"/>

 </tomcat-users>

【讨论】:

【参考方案2】:

我尝试使用target/whatever.war的解决方案 但这行不通 所以我尝试使用 */.war 并且它有效

你可以在 jenkins 上看到权威指南 EN 您需要指定在其他构建作业的工作区中找到所需文件的位置, 以及 Jenkins 应该把它们放在你当前项目工作区的什么地方。这可以是 一个灵活的正则表达式(例如 */.war,用于构建生成的任何 WAR 文件 job),或者更精确(例如 gameoflife-web/target/gameoflife.war)。

或Deploy to Tomcat with pluging DEPLOY

【讨论】:

【参考方案3】:

不管怎样,最新版本的 Jenkins 部署插件似乎只需要基本 url。所以,对我来说,是http://blah.com:8080

在此之前,我尝试了许多其他选项,包括 host-manager/html、host-manager/text

【讨论】:

【参考方案4】:

我遇到了同样的问题,在我的情况下,WAR 文件的(相对)路径不正确。显然,如果您没有完全正确(它需要相对于工作空间根目录),那么部署插件将静默失败。就我而言,路径是:

target/whatever.war

修复后,我遇到了一个不同的问题,即插件希望连接到 Tomcat 管理器的管理器/文本版本,而不是我通常默认配置的管理器/html 版本。您需要在您的 tomcat-users.xml 文件中添加一行,如下所示:

(这是您可能已经设置的“manager-gui”角色的补充。)

一旦进行了这些更改,构建和部署就可以正常工作了。

【讨论】:

太棒了,晚上救了我!我将它运行到第三个问题,因为我的应用程序是使用上下文根 /.该插件无法通过脚本管理器取消部署具有 ROOT 上下文根的应用程序。我写了几行关于如何通过拥有第二个上下文根来处理它。 macgyverdev.blogspot.se/2014/02/…【参考方案5】:

嗯,你用过Cargo 插件吗?嗯,我也有和你一样的配置,Jenkins,maven,tomcat。但是当我需要部署时,我只是使用那个插件。实际上已经有一段时间了,但是在 Jenkins 中,您可以输入命令提示行,对吗?像 mvn clean install 一样?所以,你可以做的是简单地为 Cargo 插件配置你的 pom,然后将该行添加到你的 Jenkins:

mvn cargo:deploy -Pintegration

通过这种方式,我能够每天清理安装我的构建,并将它们部署到 Tomcat。之后我在做我的休息测试。

【讨论】:

哦,我想我读得很快,你在你的项目中单独使用maven吗? :) 或者当您编写 (maven) 时,您的意思是 jenkins 的输出? 我正在使用 maven 构建,目前不使用货物。我尝试配置了一段时间,但在一些失败后决定放弃这种方法。【参考方案6】:

我使用 Hudson Post Build Task 插件 对 /manager/text API 执行 curl

可以选择和提到的插件 从 Jenkins 配置中的可用插件列表中安装。

安装插件后,您只需启用“构建后任务”并添加下一行:

curl -T - -u user:pass 'http://<tomcat-host>/manager/text/deploy?update=true&path=/<yourpath>' < <path_to_war_file>

例如:

curl -T - -u manager:123456 'http://localhost:8080/manager/text/deploy?update=true&path=/slim' < /target/dist/slim.war

您也可以使用 wget,但使用上面的命令记录输出并查看部署是否存在问题。


这里是与 /manager/text 服务相关的documentation

【讨论】:

很好的建议。我明天试试。我可能会保留悬赏,看看是否有人有使用部署插件的解决方案。 而不是直接传递 user:pass 我建议使用参数 --netrc 从 .netrc 文件中读取 user:pass ,所以密码不会显示在 jenkins 日志中! 插件活动的命令行再现对调试非常有帮助。谢谢! 嗨,德国人,我无法通过 jenkins 战争插件部署战争,但这对我有用。一个问题:jenkins 在 fire curl 命令后挂起有什么想法吗? Jenkins 将等待来自 tomcat 的响应。检查你的tomcat【参考方案7】:

假设 Jenkins 正在寻找要编译的 pom.xml。在 Jenkins 配置中设置目标和选项以编译包。然后 Jenkins 会尝试找到你的 war 文件并进行部署。 祝你好运。

【讨论】:

以上是关于詹金斯自动部署tomcat 7的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 7 环境下部署 SVN 并实现自动更新(版本库放在Tomcat下)

tomcat 自动部署代码

maven自动部署到远程tomcat教程

tomcat自动部署脚本

自动部署批处理

使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)