【发布时间】:2011-02-17 00:13:54
【问题描述】:
我有一个 NAnt 脚本,用于构建我的 .NET 项目,我正在寻找是否有办法使用 FTP 任务将生成的程序集上传到某个远程文件夹。
我在网上找不到任何好的例子,我想知道是否有人知道怎么做,是否可行。
仅供参考:我在 Windows 机器上运行它,如果它有什么不同的话。
【问题讨论】:
标签: .net file-upload ftp build-automation nant
我有一个 NAnt 脚本,用于构建我的 .NET 项目,我正在寻找是否有办法使用 FTP 任务将生成的程序集上传到某个远程文件夹。
我在网上找不到任何好的例子,我想知道是否有人知道怎么做,是否可行。
仅供参考:我在 Windows 机器上运行它,如果它有什么不同的话。
【问题讨论】:
标签: .net file-upload ftp build-automation nant
您可以在 NAnt <exec> 任务中使用 WinSCP 作为 console application。使用 WinSCP 将使您能够访问额外的好东西,例如 synchronization。
这就是我们正在做的事情,它就像一个魅力。
【讨论】:
您可以使用 WinSCP(windows 的免费 ftp 客户端)并通过 nant "exec" 标签集成它。设置相当简单,一旦完成,它就像一个魅力。
【讨论】:
我想与您分享我的任务。我只使用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>
玩得开心!
【讨论】:
在这里工作的 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>
上面exec中的backup.winscp是一个文件,内容如下
option batch abort
option confirm off
open ftp://user:password@ftp.yourhost.com
put "%1%"
exit
【讨论】:
我自己也有同样的需求,开发了一个基本的 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>
我已经在我的本地构建脚本中使用它来将我的网站上传到它的实时服务器。
【讨论】:
我们使用这样的东西(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>
【讨论】: