【问题标题】:Deploy webapp to Tomcat after Maven build on Jenkins在 Jenkins 上构建 Maven 后将 webapp 部署到 Tomcat
【发布时间】:2018-01-21 13:31:45
【问题描述】:

在 jenkins 上的 maven 构建完成后,我正在尝试将 webapp.war 复制到 tomcat 的 webapp 文件夹中。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>copy-webapp-to-tomcat</id>
            <phase>install</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target name="Deploying webapp to Tomcat.">
                    <copy todir="${tomcat.webapps.dir}" force="true">
                        <fileset dir="${project.build.directory}">
                            <include name="*.war" />
                        </fileset>
                    </copy>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

我将 jenkins 用户添加到了 tomcat 组

$ id -Gn jenkins
jenkins tomcat

我的 webapps 文件夹权限看起来像

drwxrwxr-x 10 tomcat tomcat 4,0K Aug 13 17:24 webapps/

构建完成后,复制失败

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (copy-webapp-to-tomcat) on project: An Ant BuildException has occured:
Failed to copy /var/lib/jenkins/workspace/project/target/webapp.war to /opt/tomcat/webapps/webapp.war due to java.io.FileNotFoundException /opt/tomcat/webapps/webapp.war (Permission denied)
[ERROR] around Ant part ...<copy todir="/opt/tomcat/webapps" force="true">... @ 4:50 in /var/lib/jenkins/workspace/project/target/antrun/build-Deploying webapp to Tomcat..xml

当我向其他用户添加 webapps 文件夹的写入权限时

drwxrwxrwx 10 tomcat tomcat 4,0K Aug 13 17:24 webapps/

复制成功,我得到一个文件

-rw-r--r--  1 jenkins jenkins  22M Aug 13 17:48 webapp.war

jenkins用户是tomcat组的成员并且这个组有webapps文件夹的写权限不就够了吗?

谢谢,kopi

【问题讨论】:

标签: maven tomcat jenkins deployment ant


【解决方案1】:

请研究战争部署插件,而不是使用复制方法。将来它也可以让你在远程服务器上部署战争文件。我已经为 Angular 应用做了战争部署。

  1. 为您的 tomcat 服务器创建一个 ma​​nager-script 角色用户。
  2. 在 Jenkins 中安装 Deploy to container 插件
  3. 转到 Jenkins 作业的配置并在 构建后 操作中选择选项 Deploy to container 选项。
  4. 使用 tomcat 用户名和密码输入所有详细信息并保存配置。
  5. 在构建过程后享受 Jenkins 中的自动战争部署。

您可以参考以下链接了解更多详情

https://www.packtpub.com/mapt/book/application_development/9781783553471/4/ch04lvl1sec33/deploying-a-war-file-from-jenkins-to-tomcat

【讨论】:

  • 虽然我仍然不知道为什么我的问题中的复制不起作用,但无论如何,插件可能是更好的方法。谢谢你的回答。
  • 感谢您的反馈。我不是命令行专家,所以建议了另一种方法。也许有人会添加有关您尝试过的复制方法的答案。如果它对你有用,你可以投票赞成我的答案。
  • 抱歉,忘记投票了。它工作正常,所以就在这里。
  • 谢谢@kopi_b。希望它也能帮助其他人。
  • 内部所有插件都使用复制功能。但他们也照顾好几件事。如果有人会编写自己的复制代码进行部署,那么在某些情况下会发生故障。而是专注于已经测试过的东西。对吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-31
  • 2015-12-30
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多