如何将FTP网站部署添加到VS2015 / TFS2013构建过程中

时间:2017-07-10 17:12:43

标签: visual-studio-2015 msbuild continuous-integration tfs2013 continuous-deployment

我有一个成功的构建操作。现在我想让构建定义将站点发布到我的临时位置。我尝试使用在Visual Studio中正常运行的发布配置文件,但这似乎不适用于Visual Studio和TFS的这种独特组合。这些是我的MSBuild参数:

/tv:14.0 /p:DeployOnBuild=true /p:PublishProfile="profileName.pubxml"

这是从构建返回的错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Deploy\Microsoft.Web.Publishing.Deploy.FTP.targets (42): This specific WebPublishMethod(FTP) is not yet supported on msbuild command line.  Please use Visual Studio to publish.

错误似乎是不言自明的,但是我需要提出建立配置的新手,以确保没有其他原因我会收到此错误。

我是否正确撰写了MSBuild参数?一组不同的论点会改变结果吗?

我还想问一下,如果这个特定的IDE组合(即VS2015 / TFS2013)无法处理我的发布配置文件(似乎就是这种情况),我是否可以使用另一种方法来合并自动在构建之后部署?

是否可以将PowerShell脚本添加到post build以执行FTP上传?

更新:我更改了标题和一些文字以更能反映这种需求。

1 个答案:

答案 0 :(得分:1)

正如错误消息中所述,msbuild命令行不支持FTP。

您应该切换到PowerShell解决方案,您可以参考下面的PS示例来通过FTP上传构建。查看更多详情here

$ftpWebRequest = [System.Net.FtpWebRequest]::Create((New-Object System.Uri("ftp://your_ftp_server")))
$ftpWebRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile

$inputStream = [System.IO.File]::OpenRead($filePath)
$outputStream = $ftpWebRequest.GetRequestStream()

[byte[]]$buffer = New-Object byte[] 131072;
$totalReadBytesCount = 0;
$readBytesCount;

while (($readBytesCount = $inputStream.Read($buffer, 0, $buffer.Length)) -gt 0)
{
$outputStream.Write($buffer, 0, $readBytesCount)
$totalReadBytesCount += $readBytesCount
$progress = [int]($totalReadBytesCount * 100.0 / $inputStream.Length)
Write-Progress -Activity "Uploading file..." -PercentComplete $progress -CurrentOperation "$progress% complete" -Status "Please wait."
}
$outputStream.Close();
$outputStream = $null;
Write-Progress -Activity "Uploading file..." -Completed -Status "Done!"

您还可以参考此文章:Deploying Web Sites using TFS Deployer, PowerShell and FTP

<强>更新

这只是一个示例,$ filePath应该是您的发布路径,这意味着您可以使用msbuild将网站发布到本地或UNC路径,然后调用powershell来复制/上传所有文件(包括整个文件夹结构) FTP服务器的路径。如果上面的脚本不起作用,您还可以在此处引用另一个脚本来上传整个目录:https://www.kittell.net/code/powershell-ftp-upload-directory-sub-directories/