2010-05-07 16 views
10

Ho uno script NAnt che utilizzo per creare il mio progetto .NET e sto cercando di vedere se c'è un modo per caricare gli assembly risultanti in una cartella remota utilizzando un'attività FTP.caricare il file con FTP utilizzando nant

Non ho trovato nessun buon esempio online, e mi chiedo se qualcuno sa come farlo, se è fattibile a tutti.

FYI: Lo sto eseguendo su una macchina Windows, se fa alcuna differenza.

risposta

2

Noi che usando qualcosa di simile (Nant-0.86-beta1):

<!-- Copies files from artifacts folder to destination folder --> 
<target name="deploy-configuration"> 
    <!-- Generate temporary folder for the processed web.config --> 
    <property name="generated-config-file-path" value="${path::get-temp-path()}${common::GenerateGUID()}" /> 
    <mkdir dir="${generated-config-file-path}" /> 
    <!-- Copy --> 
    <copy file="${artifacts.dir}/web.config" tofile="${generated-config-file-path}/web.config" /> 
    <!-- Update web.config with values for our destination environment before we deploy. --> 
    <update-configuration-path file="${generated-config-file-path}\web.config" /> 
    <!-- Deploy using FTP --> 
    <connection id="ftp-transfer-connection" 
    server="${project.deployment.ftp.server}" 
    username="${project.deployment.ftp.user}" 
    password="${project.deployment.ftp.password}" 
    /> 

    <ftp connection="ftp-transfer-connection" 
     showdironconnect="false" 
     createdirs="true" 
     verbose="true" 
     exec="true" 
     logfiles="false" 
     > 

    <put type="bin" 
     localdir="${generated-config-file-path}" 
     remotedir="${project.deployment.path.remote}" 
     flatten="false" 
     > 
     <include name="**\web.config" /> 
    </put> 
    </ftp> 
    <delete dir="${generated-config-file-path}" /> 
</target> 


<target name="deploy"> 

    <connection id="ftp-transfer-connection" 
    server="${project.deployment.ftp.server}" 
    username="${project.deployment.ftp.user}" 
    password="${project.deployment.ftp.password}" 
    /> 

    <ftp connection="ftp-transfer-connection" 
     showdironconnect="false" 
     createdirs="true" 
     verbose="true" 
     exec="true" 
     logfiles="false" 
     > 

    <put type="bin" 
     localdir="${artifacts.dir}" 
     remotedir="${project.deployment.path.remote}" 
     flatten="false" 
     > 
     <include name="**\bin\**" /> 
     <include name=".\*.svc" /> 
     <include name=".\web.config" /> 
    </put> 
    </ftp> 
    <!-- Deploy configuration --> 
    <call target="deploy-configuration" /> 
</target> 
+2

Nota che sembra richiedere l'attività FTP NAnt pubblicata qui: http://www.spinthemoose.com/~ftptask/ – JoshL

+0

@JoshL il collegamento sopra riportato è rotto, restituisce un 404. –

+0

https://github.com /davidalpert/NAntFTPTask/blob/master/Tasks/ftptask.cs è un collegamento più attuale, http://blog.streamlinelogic.ca/2008/03/nant-ftp-task.html è un buon percorso. – robrich

3

è possibile utilizzare il WinSCP (client gratuito FTP per Windows) e integrarla attraverso Nant tag "exec". L'installazione è abbastanza semplice e una volta eseguita funziona come un incantesimo.

+0

il tuo blog sta facendo 404 su una chiamata interna a una pagina di twitter – fiat

+0

Il link è stato corretto. Grazie per la segnalazione. –

3

Avendo lo stesso bisogno io stesso, ho sviluppato un compito NAnt di upload FTP di base. Lo si può trovare qui: https://sourceforge.net/projects/w3c-nant/

Esempio di utilizzo (copia incollato da documentazione API del sito):

<ftpUpload host="ftp.myserver.com" username="root" password="r00t" todir="/"> 
    <fileset basedir="dist"> 
     <include name="**/*" /> 
     <exclude name="**/*.config" /> 
    </fileset> 
</ftpUpload> 

ho già uso nel mio script di build locali per caricare il mio sito al suo server di vivere.

+0

Ho provato questo e funziona perfettamente, grazie Nikolaos. – akjoshi

4

lavoro WinSCP esempio qui:

<exec 
     verbose="true" 
     program="WinSCP.exe" 
     basedir="${WinSCP.Folder.Install}"> 
     <arg value="/command" /> 
     <arg value="/log=D:\Logs\WinSCP\winscp.log" /> 
     <arg value="/script=backup.winscp" /> 
     <arg line="/parameter ${YOUR_FILE}" /> 
    </exec> 

dove backup.winscp al precedente exec è un file con il seguente contenuto

option batch abort 
option confirm off 
open ftp://user:[email protected] 
put "%1%" 
exit 
1

vorrei condividere con voi il mio compito. Io uso solo i valori arg. Funziona bene. Ecco il mio script:

<property name="path.to.root" value="${project::get-base-directory()}\"/> 
<property name = "deploy.folder" value = "${path.to.root}Deploy" /> 

<!-- FTP --> 
<property name = "ftp.host" value = "127.0.0.1"/> 
<property name = "ftp.port" value="21"/> 
<property name = "ftp.user" value = "username"/> 
<property name = "ftp.password" value="mypass"/>   
<property name = "ftp.local.dir" value = "${deploy.folder}" /> 

<!-- WinSCP--> 
<property name = "winscp.run" value ="${path.to.root}\tools\WinSCP\WinSCP.com"/> 

<target description="Copy to the FTP server" name="ftp.copy"> 
    <exec program="${winscp.run}"> 
     <arg value="/command" /> 
     <arg value="option batch abort" /> 
     <arg value="option confirm off" /> 
     <arg value="option transfer binary" /> 
     <arg value="open ftp://${ftp.user}:${ftp.password}@${ftp.host}:${ftp.port}" /> 
     <arg value= '"put ""${ftp.local.dir}"""' />   
     <arg value="close" /> 
     <arg value="exit" /> 
    </exec>  
</target> 

Buon divertimento!