Web applications Tomcat应用程序的频繁更新

Web applications Tomcat应用程序的频繁更新,web-applications,deployment,build-automation,tomcat7,Web Applications,Deployment,Build Automation,Tomcat7,我有一个在Windows机器上的Tomcat7服务器上运行的应用程序。在其当前阶段,我必须经常更新和修复它。每当我需要更新应用程序时,我都会执行以下操作: 在我的Linux开发计算机上构建一个新的war文件(使用ant) 转到Windows服务器,停止Tomcat服务 将文件从我的电脑下载到Windows电脑,并将其置于webapps下 删除webapps下的旧应用程序文件夹 删除work/Catalina/localhost下的旧应用程序文件夹(否则会缓存旧版本) 重新启动Tomcat服务 我

我有一个在Windows机器上的Tomcat7服务器上运行的应用程序。在其当前阶段,我必须经常更新和修复它。每当我需要更新应用程序时,我都会执行以下操作:

  • 在我的Linux开发计算机上构建一个新的war文件(使用ant)
  • 转到Windows服务器,停止Tomcat服务
  • 将文件从我的电脑下载到Windows电脑,并将其置于webapps下
  • 删除webapps下的旧应用程序文件夹
  • 删除work/Catalina/localhost下的旧应用程序文件夹(否则会缓存旧版本)
  • 重新启动Tomcat服务

  • 我相信有一种方法可以自动完成这一切。这是什么?

    总结:我会花一些时间建立一个构建和部署方案。这是一个前期工作,但一个通用的解决方案,可以根据需要在设置后增长

    您可以使用Ant脚本完成步骤1。您首先要安装Ant,并编写一个简短的build.xml来包含以下内容。正确安装Ant后,只需切换到build.xml所在的目录并运行“Ant”

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

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

    您也可以通过Ant控制MSI的创建。下面是my 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>
    
    
    
    可能会有帮助。

    总结:我会花一些时间建立一个构建和部署方案。这是一个前期工作,但一个通用的解决方案,可以根据需要在设置后增长

    您可以使用Ant脚本完成步骤1。您首先要安装Ant,并编写一个简短的build.xml来包含以下内容。正确安装Ant后,只需切换到build.xml所在的目录并运行“Ant”

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

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

    您也可以通过Ant控制MSI的创建。下面是my 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>
    
    
    
    可能会有帮助。

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

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

    有很多方法

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

    然后是Jenkins,它可以用于在构建运行的Tomcat实例后将war部署到该实例中。它使用Tomcat的标准ManagerWebApp,因此必须在Tomcat中安装它,并设置用户和密码

    请注意,不幸的是,频繁地重新部署到运行中的Tomcat很容易发现您的webapp在取消部署时泄漏内存。
    Tomcat wiki上的文章都是有用的读物。自动Tomcat重启可能是一种有用的权宜之计。

    有很多方法可以做到这一点

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

    然后是Jenkins,它可以用于在构建运行的Tomcat实例后将war部署到该实例中。它使用Tomcat的标准ManagerWebApp,因此必须在Tomcat中安装它,并设置用户和密码

    请注意,不幸的是,频繁地重新部署到运行中的Tomcat很容易发现您的webapp在取消部署时泄漏内存。
    Tomcat wiki上的文章都是有用的读物。自动重新启动Tomcat可能是一个有用的权宜之计。

    这是一个优秀的软件,谢谢!但是,我没有找到实现我的确切用例的方法:*Windows服务器处于脱机状态-我没有ftp/telnet/ssh访问权。*我手动将war下载到Windows服务器。*war文件始终具有相同的名称,因此服务器端脚本可能会自动部署它,只要我知道如何构建此类脚本即可。您可以使用kwatee生成CLI脱机安装程序。将安装程序复制到windows box后,只需启动它,它就会执行所有必要的操作。您只需要修改教程的配置,将curl替换为curl.exe,您可以从curl.haxx.se下载它。这是一个非常好的软件,谢谢!但是,我没有找到实现我的确切用例的方法:*Windows服务器处于脱机状态-我没有ftp/telnet/ssh访问权。*我手动将war下载到Windows服务器。*war文件始终具有相同的名称,因此服务器端