2016-12-15 146 views
0

因此,我製作了一個ANT目標,將我們的應用程序部署到遠程開發服務器上的Tomcat。 ANT部署到tomcat目標在本地Tomcat實例上完美工作。當我部署到遠程服務器時,出現fat 500錯誤,但應用程序實際部署到服務器,我們可以查看和使用它,就好像沒有錯誤一樣。ANT到遠程Tomcat部署獲得500

超酷,它的工作原理,但500錯誤導致ANT目標說生成失敗。如果ANT表示構建失敗,那麼Hudson也會構建我們的構建服務器,這意味着我們將會有悲傷的紅點而不是快樂的綠點。

我們在Tomcat v9中使用了最新最好的ANT。

下面是我執行「ant deploy-dev」目標時得到的錯誤。


[[email protected] app.directory]$ ant deploy-dev Buildfile: /home/username/git/app.directory/build.xml Trying to override old definition of datatype resources

deploy-dev: [echo] Deploying app to: https://dev.myapp.com

BUILD FAILED /home/username/git/app.directory/build.xml:73: The following error occurred while executing this line: /home/username/git/app.directory/build.xml:146: java.io.IOException: Server returned HTTP response code: 500 for URL: https://dev.myapp.com/manager/text/deploy?path=%2Fmy-app%2F at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:254) at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:194) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:435) at org.apache.tools.ant.Target.performTasks(Target.java:456) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405) at org.apache.tools.ant.Project.executeTarget(Project.java:1376) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1260) at org.apache.tools.ant.Main.runBuild(Main.java:854) at org.apache.tools.ant.Main.startAnt(Main.java:236) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)

Total time: 3 minutes 3 seconds


要得到一個什麼樣的運行,這裏是ANT的build.xml的重要組成部分的想法。

<property environment="env"/> 
<property file="build.properties"/> 

<!-- Import --> 
<import file="${env.CATALINA_HOME}/bin/catalina-tasks.xml" optional="true"/> 

<!-- The deploy to Tomcat target --> 
<target name="deploy-local" description="Deploy the app to local Tomcat"> 
    <tomcat-deploy base-url="${url.base.local}"/> 
</target> 

<target name="deploy-dev" description="Deploy the app to dev Tomcat"> 
    <tomcat-deploy base-url="${url.base.dev}"/> 
</target> 

<target name="undeploy-local" depends="stop-local" description="Undeploy the app from local Tomcat"> 
    <tomcat-undeploy base-url="${url.base.local}"/> 
</target> 

<target name="undeploy-dev" depends="stop-dev" description="Undeploy the app from dev Tomcat"> 
    <tomcat-undeploy base-url="${url.base.dev}"/> 
</target> 

<target name="stop-local" description="Stop the app on local Tomcat"> 
    <tomcat-stop base-url="${url.base.local}"/> 
</target> 

<target name="stop-dev" description="Stop the app on dev Tomcat"> 
    <tomcat-stop base-url="${url.base.dev}"/> 
</target> 

<macrodef name="tomcat-deploy"> 
    <attribute name="base-url"/> 
    <sequential> 
     <echo>Deploying app to: @{base-url}</echo> 
     <deploy url="@{base-url}/manager/text" username="${username}" password="${password}" 
       path="/${app.name}" war="file:${war.path}.war"/> 
    </sequential> 
</macrodef> 

<macrodef name="tomcat-undeploy"> 
    <attribute name="base-url"/> 
    <sequential> 
     <echo>Un-deploying app from: @{base-url}</echo> 
     <undeploy 
       failonerror="no" 
       url="@{base-url}/manager/text" 
       username="${username}" 
       password="${password}" 
       path="/${app.name}" 
      /> 
    </sequential> 
</macrodef> 

<macrodef name="tomcat-stop"> 
    <attribute name="base-url"/> 
    <sequential> 
     <echo>Stopping the app at: @{base-url}</echo> 
     <stop url="@{base-url}/manager/text" username="${username}" 
       password="${password}" path="/${app.name}" /> 
    </sequential> 
</macrodef> 

任何人都知道爲什麼部署到遠程工作,但仍然返回錯誤?我得到的錯誤有點模糊,所以我不知道我能做些什麼來調試它。

+0

您是否在服務器的日誌文件中收到任何消息? –

+0

我沒有收到任何服務器錯誤。該應用程序實際部署得很好。我認爲這與服務器花費很長時間來實際部署應用程序有關。似乎目標正在等待成功響應,並在獲取之前超時。 –

回答

0

問題在於服務器部署應用的時間太長。某處Tomcat Deploy目標正在等待來自服務器的表示應用程序已部署的響應。不幸的是,唯一的錯誤是500,沒有別的可以繼續。

這個解決方案,我只是簡單地將版本9的Tomcat重新安裝到8以上,而且一切都變得更快,構建成功。

我不能說這是最好的答案,但我得到了一切正常工作。希望有一天有人會有更好的解決方案。

+0

請注意,Tomcat 9還沒有穩定版本。 Tomcat 8.5可能對你更可靠。 –