Deployment 对现有脚本的ANT-speed改进

Deployment 对现有脚本的ANT-speed改进,deployment,ant,Deployment,Ant,我已经建立了一套通用的部署脚本,这些脚本对我们的大部分工作都非常有效。然而,我们刚刚将我们最大的项目引入到设置中,我们现在发现时间太多了,太长了,我们不喜欢 目前的项目大小为33226个文件,大小为400Mb以上。根据ANT做出的某些决定(详见下文),时间目前在13分钟到55分钟之间(最后一次部署时间) 就步骤而言,我们目前在x2服务器上执行以下操作:- 1) ANT将项目从SVN导出到两台服务器(由3部分组成) 2) 它开始关闭服务器1上的Web服务。 这是我们用来阻止Windows(2003

我已经建立了一套通用的部署脚本,这些脚本对我们的大部分工作都非常有效。然而,我们刚刚将我们最大的项目引入到设置中,我们现在发现时间太多了,太长了,我们不喜欢

目前的项目大小为33226个文件,大小为400Mb以上。根据ANT做出的某些决定(详见下文),时间目前在13分钟到55分钟之间(最后一次部署时间)

就步骤而言,我们目前在x2服务器上执行以下操作:-

1) ANT将项目从SVN导出到两台服务器(由3部分组成)

2) 它开始关闭服务器1上的Web服务。 这是我们用来阻止Windows(2003)文件锁定失败的解决方案

3) ANT在当前版本(所有部分)上运行“移动”任务,将导出的新版本移动到临时文件夹中

4) 运行自定义部署代码-其中一部分是将永久功能从临时文件夹移动到新文件夹(即系统文件/Web服务器管理工具)

5) 删除临时文件夹

6) 使Web服务重新联机

。。。冲洗并重复第二个服务器步骤2->6

7) 保存ANT日志

我遇到的主要问题是蚂蚁移动任务似乎要做出两个决定之一。它可以是:

a) 非常简单地交换版本,然后继续-花一两分钟来处理它或 b) 进行某种完整性检查,确保将每个文件和文件夹从一个位置移动到另一个位置。这会淹没原木,需要相当长的时间才能完成。因此增加了40多分钟的额外时间

我在网上找不到任何解释是什么导致ANT/OS做出这个决定的东西。选择A将是理想的全职情况

我试过分别复制、删除。我已经尝试了同步任务。所有这些似乎都有这种缓慢的表现

所以我真的在问,其他比我更有经验的人在这种规模的部署中做了什么。关于如何改进/加快这一过程,你有什么提示/建议吗?你知道这一举措在做什么吗?有没有更好的办法

非常感谢,
詹姆斯

谢谢大家的意见

为了给这个问题增加一个答案,我做了如下的修改,这些修改似乎让它停顿了几分钟

第一个问题是,我已经改变了我前面提到的评论后面的交换方式。ANT似乎会尝试执行以下操作:-

如果目标目录不存在,Ant将对目录进行重命名。但是如果目标目录存在,它将复制到目录中,并从源目录中删除

我认为发生的事情是ANT试图在旧版本被完全删除之前把新版本放进去。因此,我现在不再尝试重命名旧版本,而是将其移动到一个临时文件夹中,并在构建结束时将其删除。这似乎稳定了这方面的局势


我还添加了一些其他东西,使ANT变得更聪明:-)

1) 我已经对它进行了设置,这样ANT就不会部署与当前存在的构建相同的任何部分。因此,如果选择了第1部分,并且该部分已经在测试环境中,那么它将从构建和SVN导出中删除

2) 服务关闭/启动后,我让ANT读取返回的响应。如果一个服务在调用时告诉它它已经启动了,有时如果一个服务依赖于其他Windows自动启动它们,就会发生这种情况,那么我已经告诉ANT留下来,转到下一个


像这样的小步骤似乎改善了很多事情。我仍然想尝试从他们身上获得更多,但这些无疑给了他们一大步

再次感谢,
詹姆斯

谢谢大家的意见

为了给这个问题增加一个答案,我做了如下的修改,这些修改似乎让它停顿了几分钟

第一个问题是,我已经改变了我前面提到的评论后面的交换方式。ANT似乎会尝试执行以下操作:-

如果目标目录不存在,Ant将对目录进行重命名。但是如果目标目录存在,它将复制到目录中,并从源目录中删除

我认为发生的事情是ANT试图在旧版本被完全删除之前把新版本放进去。因此,我现在不再尝试重命名旧版本,而是将其移动到一个临时文件夹中,并在构建结束时将其删除。这似乎稳定了这方面的局势


我还添加了一些其他东西,使ANT变得更聪明:-)

1) 我已经对它进行了设置,这样ANT就不会部署与当前存在的构建相同的任何部分。因此,如果选择了第1部分,并且该部分已经在测试环境中,那么它将从构建和SVN导出中删除

2) 服务关闭/启动后,我让ANT读取返回的响应。如果一个服务在调用时告诉它它已经启动了,有时如果一个服务依赖于其他Windows自动启动它们,就会发生这种情况,那么我已经告诉ANT留下来,转到下一个


像这样的小步骤似乎改善了很多事情。我仍然想尝试从他们身上获得更多,但这些无疑给了他们一大步

再次感谢,
James

即使是我们也面临着自动部署脚本在组织中花费较长时间的问题。因此,最初我们让脚本按顺序运行,如清理、停止Tomcat、更新、启动Tomcat,并确保所有Web应用程序都已正确部署

因此,我们做了如下工作: 1.同时清理并停止所有Tomcat 2.做svn开关 3.平行启动所有Tomcat 4.确保所有webapps都已部署到专业版
    <target name="all_clean_parallel">
      <parallel>
        <antcall target="x1_clean"/>
        <antcall target="x2_clean"/>
        <antcall target="x3_clean"/>            
    </parallel>  
  </target> 

  <target name="all_start_parallel">
    <parallel>
      <antcall target="x1_start"/>
      <antcall target="x2_start"/>
      <antcall target="x3_start"/>        
   </parallel>
  </target>
 <macrodef name="mStatus">
   <attribute name="aModule" />
   <attribute name="aHost" default="localhost"/>
   <attribute name="aPort" default="9012"/>
   <attribute name="aMaxWait" default="240"/>
   <attribute name="aTomcat" default=""/>
   <attribute name="aState" default="1"/>
   <sequential>
     <waitfor maxwait="@{aMaxWait}" maxwaitunit="second" timeoutproperty="@{aHost}.@{aTomcat}.@{aModule}.@{aPort}.server.timeout" >
     <and>
       <jmx:equals
                host="@{aHost}"
                port="@{aPort}"
                ref="@{aHost}.@{aTomcat}.@{aModule}.@{aPort}"
                        name="Catalina:j2eeType=WebModule,name=//localhost/@{aModule},J2EEApplication=none,J2EEServer=none" 
                attribute="state"
                value="@{aState}"
    />
  </and>

</waitfor>
<if>
  <equals arg1="${@{aHost}.@{aTomcat}.@{aModule}.@{aPort}.server.timeout}" arg2="true" />
  <then>
    <var name="failBuild" value="true"/>
    <echo message="*************************Host.Tomcat.Module = @{aHost}.@{aTomcat}.@{aModule} is not deployed into the tomcat" />
  </then>
  <else>
    <echo message="@{aHost}.@{aModule} is deployed into the tomcat" />
  </else>
 </if>
</sequential>