2012-03-18 140 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