首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANT - speed对现有脚本的改进

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

Stack Overflow用户
提问于 2011-10-25 21:24:14
回答 2查看 657关注 0票数 1

我已经构建了一组通用的部署脚本,它们对我们的大多数东西都很有效。然而,我们刚刚将我们最大的项目引入到设置中,现在我们发现时间太多太长了,不符合我们的喜好。

目前的项目大小为33226个文件,大小为400Mb以上。时间目前在13分钟到55分钟(上次部署时间)之间,这取决于ANT做出的某些决定(更多信息见下文)。

就我们目前在x2服务器上执行的步骤而言:

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

2)它开始关闭1号服务器上的Web服务。这是我们用来阻止Windows (2003)文件锁定失败部署的变通方法。

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

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

5)删除临时文件夹。

6)使Web服务重新联机

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

7)保存蚂蚁日志。

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

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

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

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

所以我真的在问,其他比我更有经验的人在这种规模的部署中会做些什么。关于如何改进/加速此过程,您有什么建议/建议吗?你知道move在做什么吗?是否有更好的方法来做这一切?

非常感谢,詹姆斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-01 21:54:50

感谢所有人的投入。

为了给这个问题增加一个答案,我做了以下更改,似乎已经影响了它的几分钟。

第一个是我在前面提到的评论后面改变了交换的方式。看起来蚂蚁会尝试做以下事情:

“如果目标目录不存在,Ant将重命名目录。但如果目标目录存在,它会复制到目录中并从源目录中删除。”

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

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

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

2)随着服务的关闭/启动,我让ANT读取返回的响应。如果一个服务在调用时告诉它它已经启动了,就像有时一个服务依赖于其他Windows自动启动它们时发生的那样,那么我已经告诉ANT挂起并转移到下一个。

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

再次感谢你,詹姆斯

票数 1
EN

Stack Overflow用户

发布于 2012-08-28 16:05:47

甚至我们也面临着自动部署脚本在我们组织中花费更长时间的问题。所以一开始我们的脚本是按顺序运行的,比如清理,停止tomcats,更新,启动tomcats,并确保所有的we应用程序都被正确部署。

因此,我们做了如下工作: 1.并行清理和停止所有tomcat 2.使用svn sv3.并行启动所有tomcat 4.确保所有we应用使用jmx正确部署。

下面是这段代码:

代码语言:javascript
复制
    <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>

使用jmx help检查webapp是否正确部署的代码:

代码语言:javascript
复制
 <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7889943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档