How can I add FTP website deployment to a VS2015/TFS2013 build process

孤者浪人 提交于 2019-12-02 16:19:30

问题


I have a successful build operating. Now I would like to have the build definition publish the site to my staging location. I tried to use a publishing profile that functions correctly from within Visual Studio but that doesn't seem to work with this unique combinations of Visual Studio and TFS. These are my MSBuild arguments:

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

And this is the error returned from the build:

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.

The error seems self-explanatory, but being new to build configurations I need to ask to make sure there aren't other reasons I would get this error.

Did I compose the MSBuild arguments correctly? Would a different set of arguments change the outcome?

I also would like to ask, if this specific IDE combo (i.e. VS2015/TFS2013) is not able to process my publish profile (as seems to be the case), is there an alternate method I can use to incorporate an automatic deploy after the build?

Could a PowerShell script be added to the post build to perform the FTP upload?

Update: I changed the title and some text to be more reflective of the need.


回答1:


Just as mentioned in the error message FTP is not supported on msbuild command line.

You should switch to a PowerShell solution, you can reference below PS sample to upload the build via FTP. See more details 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!"

You can also reference this article: Deploying Web Sites using TFS Deployer, PowerShell and FTP

Update:

That's just a sample, the $filePath should be your publish path, that means you can use msbuild to publish the website to local or UNC path, then call powershell to copy/upload all the files (including entire folder structure) from that path to FTP server. If above script not worked, you can also reference another script here to upload the entire directory : https://www.kittell.net/code/powershell-ftp-upload-directory-sub-directories/



来源:https://stackoverflow.com/questions/45017998/how-can-i-add-ftp-website-deployment-to-a-vs2015-tfs2013-build-process

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!