Как быстро развернуть активы в Amazon S3 с целью Ant?

Как быстрее всего развернуть контент в CDN с целью Ant? Моя цель Ant работает на сервере непрерывной интеграции (Hudson). В моем текущем решении используется завиток, и оно немного медленное. Должен ли я использовать 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


person milkplus    schedule 29.09.2010    source источник


Ответы (1)


РЕШЕНО

Я нашел блог под названием «Развертывание ресурсов в Amazon S3 с помощью Ant", что было чрезвычайно полезно. Он использует скрипт 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>
person milkplus    schedule 30.09.2010