2010-09-29 47 views
0

將內容部署到具有Ant目標的CDN的最快捷方式是什麼?我的Ant目標在持續集成服務器(Hudson)上運行。我目前的解決方案使用捲曲,速度有點慢。我應該使用wput還是其他的東西,我會如何在螞蟻中做到這一點?如何使用Ant目標快速將資產部署到Amazon S3?

<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 [email protected]{file}"/> 
      <arg value="http://cdn.com/project"/> 
     </exec> 
    </sequential> 
</for> 
</target> 

若干想法已經提出了通過使用平行ant任務同時傳送幾個相互排斥的文件集,以加快的內容轉移到CDN

1)最大程度的發揮管帶寬。例如,如果輸出文件夾中有三個子文件夾,則每個文件夾都可以分配給不同的並行任務,每個文件都會迭代文件,在每個文件上調用curl以將其傳輸到cdn。 http://ant.apache.org/manual/Tasks/parallel.html

2)編寫一個自定義的ant任務(bash腳本?),該任務將具有關於構建的本地知識,以便任何由最後構建更改的文件都被標記,只有這些文件將被傳輸。這會阻止發送已經在cdn上的文件。

3)從cdn讀取遠程目錄並使用時間戳確定要發送的文件。根據cdn以及它是否允許這樣的查詢,這可能是不可能的。我希望能做到這一點,但我沒有看到一個選擇。 http://wput.sourceforge.net/wput.1.html

回答

2

議決

我發現了標題爲 「Deploying assets to Amazon S3 with Ant」 一個博客這是非常有用的。它使用一個python腳本's3cmd sync',它只傳輸在目的地不存在的文件。

我結束了這個Ant目標:

<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>