【问题标题】:Jenkins auto deploy tomcat 7詹金斯自动部署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部署到哪个主机?

标签: java tomcat maven jenkins tomcat7


【解决方案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 文件并进行部署。 祝你好运。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多