Загрузить файл с помощью FTP с помощью nant

У меня есть NAnt script, который я использую для создания моего .NET-проекта, и я смотрю, есть ли способ загрузить приведенные сборки в какую-то удаленную папку с помощью задачи FTP.

Я не мог найти хороший пример онлайн, и мне интересно, знает ли кто, как это сделать, если это вообще возможно.

FYI: Я запускаю его на машине с Windows, если это имеет значение.

Ответ 2

Рабочий пример 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 в выше exec является файлом со следующим содержимым

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

Ответ 3

Вы можете использовать WinSCP (бесплатный ftp-клиент для Windows) и интегрировать его через тег "exec". Настройка довольно прямолинейная, и как только она работает, она работает как шарм.

Ответ 4

Имея ту же самую потребность, я разработал базовую задачу NAnt для загрузки FTP. Вы можете найти это здесь: 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>

Я уже использую его в своих локальных скриптах сборки, чтобы загрузить мой сайт на свой сервер.

Ответ 5

Мы используем что-то вроде этого (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>

Ответ 6

Я хотел бы поделиться с вами своей задачей. Я использую только значения arg. Он работает нормально. Здесь мой 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>

Удачи!