2010-05-07 11 views
10

Tengo un script NAnt que uso para construir mi proyecto .NET, y estoy buscando para ver si hay una manera de cargar los ensamblados resultantes a alguna carpeta remota usando una tarea FTP.cargar archivo con FTP usando nant

No pude encontrar ningún buen ejemplo en línea, y me pregunto si alguien sabe cómo hacerlo, si es posible en absoluto.

FYI: Lo estoy ejecutando en una máquina de Windows, si hace alguna diferencia.

Respuesta

2

Nos usando algo como esto (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

Tenga en cuenta que esto parece requerir la tarea FTP de NAnt publicada aquí: http://www.spinthemoose.com/~ftptask/ – JoshL

+0

@JoshL el enlace anterior está roto, da un 404. –

+0

https://github.com /davidalpert/NAntFTPTask/blob/master/Tasks/ftptask.cs es un enlace más actual, http://blog.streamlinelogic.ca/2008/03/nant-ftp-task.html es una buena guía. – robrich

3

Usted puede utilizar el WinSCP (cliente FTP gratuito para Windows) e integrarlo a través de la etiqueta Nant "exec". La configuración es bastante directa y una vez que está hecha funciona como un encanto.

+0

su blog está 404'ing en una llamada interna a una página de Twitter – fiat

+0

El enlace ha sido reparado. Gracias por marcar. –

3

Teniendo la misma necesidad, desarrollé una tarea básica de carga de FTP FTP. Lo puedes encontrar aquí: https://sourceforge.net/projects/w3c-nant/

Ejemplo de uso (copia pegada de documentación de la API del sitio):

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

ya lo utilizo en mis scripts de construcción locales para subir mi sitio a su servidor en vivo.

+0

Probé esto y funciona perfectamente, gracias Nikolaos. – akjoshi

4

WinSCP Trabajo ejemplo aquí:

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

donde backup.winscp en exec anterior es un archivo con el siguiente contenido

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

me gustaría compartir con ustedes mi tarea. Solo uso los valores arg. Funciona bien Aquí está mi 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> 

Have fun!

Cuestiones relacionadas