2012-03-18 145 views
0

我有一个应用程序在Windows机器上的Tomcat 7服务器上运行。在现阶段,我必须经常更新和修复它。每当我需要更新的应用程序,我做了这一切:Tomcat应用程序的频繁更新

  1. 建立一个新的战争文件(使用Ant)我的Linux开发计算机上;
  2. 转到Windows服务器,停止Tomcat服务;
  3. 将文件从我的电脑下载到Windows电脑,放到webapps下;
  4. 删除webapps下的旧应用程序文件夹;
  5. 删除工作/ Catalina/localhost下的旧应用程序文件夹(否则会保留旧版本缓存)。
  6. 重新启动Tomcat服务。

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

+1

看到这个ANT build.xml http://stackoverflow.com/a/18460429/185565回答。它展示了如何在开发时直接从项目文件夹使用webapp。更容易看到.jsp,.js,.css立即更改。后来建立战争部署在某个地方。部署可能使用ant filecopy或ssh/ftp将.war复制到tomcat/webapps /文件夹。 – Whome 2013-09-08 22:13:06

回答

2

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

+0

这是一款优秀的软件, 谢谢! 但是,我没有找到实现我的确切用例的方法: * Windows服务器处于脱机状态 - 我没有ftp/telnet/ssh访问权限。 *我手动将战争下载到Windows服务器。 * war文件总是具有相同的名称,所以如果我只知道如何构建这样的脚本,服务器端脚本可能会自动部署它。 – 2012-03-20 07:01:06

+0

您可以使用kwatee生成CLI离线安装程序。一旦你将安装程序复制到你的Windows系统中,只需启动它,它就会执行所有必要的操作。您只需要修改教程的配置以便用curl.exe代替卷曲,您可以从curl.haxx.se下载它。 – mac 2012-03-22 11:04:25

2

摘要:我会投入一些时间来设置构建和部署方案。这是一项前期工作,但是一个通用的解决方案可以在安装后根据需要进行增长。

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

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

(旁注:我们使用高级安装企业四年来它的不断完善,以及一个非常高品质的产品,您一定不会失望。)

您可以控制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> 

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

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

该级别的自动化一旦启动并运行就会支付股息。但如果它比你需要的更多(我不会感到惊讶),this answer可能会有所帮助。

+0

高级安装程序看起来像一个很好的产品。问题是,我的开发计算机是Linux,AI不能在Linux上运行(可能甚至是使用Wine:http://www.advancedinstaller.com/forums/viewtopic.php?f=1&t=9124) – 2012-03-20 07:10:40

1

有办法做到这一点。

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

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

请注意,经常重新部署到正在运行的Tomcat不幸是一种简单的方法,可以发现Web应用程序在取消部署时泄漏内存。 OutOfMemoryMemoryLeakProtection关于Tomcat wiki的文章是有用的读取。自动化的Tomcat重启可能是一个有用的临时措施。

+0

好吧,我安装了詹金斯和部署插件,创建了一个空的构建作业,勾选“部署”复选框,运行作业,并没有发生任何事情 - 控制台输出显示“成功”,但新的战争未部署... – 2012-03-25 13:10:35

+0

@Erel你是什么意思空构建?如果这项工作不会造成战争,那么您是如何告诉它从何处开始部署的?您是否填写了部署操作的所有设置(包括tomcat地址/用户名/密码)?控制台不说别的吗? – 2012-04-01 22:07:30

+0

我终于明白,我必须有一些构建步骤才能使插件工作。但是,还有一个问题 - 部署插件似乎只是将战争放入webapps文件夹中,而不停止Tomcat服务。这导致只是相同的问题,就像当我这样做时:http://stackoverflow.com/questions/9896102/tomcat-webapp-folder-is-ruined-when-putting-a-new-war-file/9903722#9903722 – 2012-04-03 05:47:57