0

将内容部署到具有 Ant 目标的 CDN 的最快方法是什么?我的 Ant 目标在持续集成服务器 (Hudson) 上运行。我目前的解决方案使用 curl 并且有点慢。我应该使用 wput 还是其他东西,我将如何在 ant 中做到这一点?

<target name="Deploy">
<for param="file"> 
    <path> 
        <fileset dir="${basedir}/output" includes="**/*"/>
    </path>
    <sequential> 
        <echo> Deploy @{file} </echo>
        <exec executable="curl"> 
           <arg value="-F name=value"/>  <!-- params for secure access -->
           <arg value= "-F file=@{file}"/> 
           <arg value="http://cdn.com/project"/>
        </exec>
    </sequential> 
</for>
</target>

已经提出了几个想法来加快向 cdn 传输内容的速度

1) 通过使用并行 ant 任务同时传输多个互斥文件集来最大化管道带宽。例如,如果输出文件夹中有三个子文件夹,则可以将每个子文件夹分配给不同的并行任务,并且每个子文件夹都会遍历文件,对每个文件调用 curl 以将其传输到 cdn。 http://ant.apache.org/manual/Tasks/parallel.html

2) 编写一个自定义 ant 任务(bash 脚本?),该任务将具有有关构建的本地知识,以便标记上次构建更改的任何文件,并且仅传输这些文件。这将阻止发送已在 cdn 上的文件。

3)从cdn读取远程目录并使用时间戳来确定要发送哪些文件。这可能无法实现,具体取决于 cdn 以及它是否允许此类查询。我希望 wput 可以做到这一点,但我没有看到这样的选择。 http://wput.sourceforge.net/wput.1.html

4

1 回答 1

2

解决

我发现一个名为“使用 Ant 将资产部署到 Amazon S3 ”的博客非常有帮助。它使用一个 python 脚本' s3cmd sync ',它只传输目的地不存在的文件。

我最终得到了这个蚂蚁目标:

<target name="s3Upload">

<property name="http.expires" value="Fri, 31 Dec 2011 12:00:00 GMT" />
<exec executable="${PYTHON_DIR}\python.exe" failonerror="true">
  <arg value="${PYTHON_DIR}\Scripts\s3cmd" />
    <arg value="--guess-mime-type" />
    <arg value="--add-header=Cache-Control:public, max-age=630657344" />
    <arg value="--add-header=Expires:${http.expires}" />
    <arg value="--encoding=UTF-8" />
    <arg value="--skip-existing" />
    <arg value="--recursive" />
    <arg value="--exclude=*.log" />
    <arg value="--acl-public" />
    <arg value="sync" />
    <arg value="${CDN_DIR}/" />
    <arg value="s3://my-project-cdn/" />
  </exec>

</target>
于 2010-09-30T02:42:49.013 回答