使用nant上传文件到FTP

10

我有一个用于构建我的.NET项目的NAnt脚本,我想知道是否有一种方法可以使用FTP任务将生成的程序集上传到某个远程文件夹。

我在网上找不到任何好的示例,想知道是否有人知道如何做到这一点,或者是否可行。

提示:我正在Windows机器上运行它,如果有任何区别,请告诉我。

6个回答

5
你可以在NAnt的<exec>任务中使用WinSCP作为控制台应用程序。使用WinSCP将使您获得额外的好处,如同步。我们正在这样做,它非常有效。

4
这里有一个可行的WinSCP示例:
    <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>

在以上执行中,backup.winscp 是一个具有以下内容的文件。

option batch abort
option confirm off 
open ftp://user:password@ftp.yourhost.com
put "%1%"
exit

3
您可以使用WinSCP(免费的Windows FTP客户端)并通过nant“exec”标记集成它。设置相当简单,一旦完成就像魔法一样工作。

您的博客在内部调用 Twitter 页面时出现 404 错误。 - fiat
链接已修复。感谢您的提示。 - Rafal Labecki

3

我自己也有同样的需求,因此我开发了一个基本的FTP上传NAnt任务。您可以在这里找到它:https://sourceforge.net/projects/w3c-nant/

示例用法(从该站点的API文档复制并粘贴):

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

我已经在我的本地构建脚本中使用它来将我的网站上传到其实时服务器。


2
我们使用类似这样的工具(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
请注意,这似乎需要在此处发布的NAnt FTP任务:http://www.spinthemoose.com/~ftptask/ - JoshL
@JoshL 上面的链接已经失效了,显示404错误。 - Nikolaos Georgiou
https://github.com/davidalpert/NAntFTPTask/blob/master/Tasks/ftptask.cs 是一个更为当前的链接,http://blog.streamlinelogic.ca/2008/03/nant-ftp-task.html 是一个很好的教程。 - robrich

1

我想分享我的任务。我只使用arg值。它工作正常。这是我的脚本:

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

玩得愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接