经常更新Tomcat应用程序

时间:2012-03-18 15:33:07

标签: web-applications deployment build-automation tomcat7

我有一个在Windows机器上的Tomcat 7服务器上运行的应用程序。在目前阶段,我必须经常更新并修复它。每当我需要更新应用程序时,我都会这样做:

  1. 在我的Linux开发计算机上构建一个新的war文件(使用ant);
  2. 转到Windows服务器,停止Tomcat服务;
  3. 将文件从我的电脑下载到Windows电脑,将其放在webapps下;
  4. 删除webapps下的旧应用程序文件夹;
  5. 删除work / Catalina / localhost下的旧应用程序文件夹(否则会保留旧版本的缓存)。
  6. 重新启动Tomcat服务。
  7. 我相信有一种方法可以自动完成所有这些操作。它是什么?

3 个答案:

答案 0 :(得分:2)

总结:我花了一些时间来设置构建和部署方案。这是预先做的一些工作,但是一般的解决方案可以在设置后根据需要增长。

您可以使用Ant脚本完成第1步。您首先安装Ant,并编写一个简短的build.xml来包含this example之类的内容。正确安装Ant后,只需更改到build.xml所在的目录并运行“ant”。

对于第2步到第6步,由于您需要清理目标,管理服务等,我会考虑生成MSI安装程序或可执行文件。我对MSI工具的首选是Advanced Installer。您将在the list of features下看到免费软件版本允许您在安装和卸载时控制(启动,停止,安装,卸载)Windows服务。

(旁注:我们已经使用了Advanced Installer Enterprise四年了。它不断改进,产品质量非常高。你不会失望的。)

您也可以通过Ant控制MSI创建。这是我的build.xml中的一个片段,它调用一些宏来编译和部署我维护的产品之一:

<target name="myproduct-installer" depends="unzip-myproductdocs">
    <build-ai-installer product.name="MyProduct" installer.path="setup/installs/MyProduct" project.file="MyProduct.aip" />
</target>
<target name="release-myproduct-installer">
    <release-AI-installer product.name="MyProduct" installer.path="setup/installs/MyProduct" product.path="${some-predefined-target}" />
</target>

以下是上面使用的宏:

<macrodef name="build-ai-installer">
    <attribute name="product.name" />
    <attribute name="installer.path" />
    <attribute name="project.file" />
    <sequential>
        <echo message="Making installer at @{installer.path}" />
        <mkdir dir="@{installer.path}/newInstall" />
        <exec dir="@{installer.path}" executable="${env.ADVANCEDINSTALLER}" failonerror="true">
            <arg line="/edit @{project.file} /SetVersion ${product.version}" />
        </exec>
        <exec dir="@{installer.path}" executable="${env.ADVANCEDINSTALLER}" failonerror="true">
            <arg line="/build @{project.file}" />
        </exec>
    </sequential>
</macrodef>

<macrodef name="release-AI-installer">
    <attribute name="product.name" />
    <attribute name="installer.path" />
    <attribute name="product.path" />
    <sequential>
        <copy todir="@{product.path}">
            <fileset dir="@{installer.path}/newInstall" />
        </copy>
    </sequential>
</macrodef>

这些宏使用名为env.ADVANCEDINSTALLER的Windows环境变量。更简单的构建设置将只设置Ant属性并删除'env。'前缀:

<property name="ADVANCEDINSTALLER" value="path-to-AdvancedInstaller.com" />

这种自动化程度一旦启动并运行就会带来好处。但如果它超出你的需要(我不会感到惊讶),this answer可能有所帮助。

答案 1 :(得分:2)

使用kwatee agile deployment(我是开发人员),您可以在几分钟内配置webapps到tomcat的自动部署(请参阅tutorial)。然后,您可以通过简单的Web界面按需触发部署,也可以使用kwatee ant任务或kwatee maven插件自动触发部署。哦,它也是免费的。

答案 2 :(得分:1)

有办法做到这一点。

一种方法是使用持续集成系统,例如Jenkins。它可以让你定期或在每次提交到源存储库之后构建战争。

然后有Jenkins Deploy Plugin可用于在构建之后将war部署到正在运行的Tomcat实例。它使用Tomcat的标准管理器webapp,因此必须在Tomcat中安装,并设置用户和密码。

请注意,经常重新部署到正在运行的Tomcat是一种简单的方法,可以找出您的webapp在取消部署时泄漏内存。 OutOfMemory  和Tomcat wiki上的MemoryLeakProtection文章是有用的读物​​。自动Tomcat重启可能是一个有用的权宜之计。