詹金斯自动部署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的主要内容,如果未能解决你的问题,请参考以下文章