PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, September 28, 2022

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

 September 28, 2022     continuous-deployment, continuous-integration, msbuild, visual-studio-2015     No comments   

Issue

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.


Solution

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/



Answered By - Andy Li-MSFT
Answer Checked By - David Goodson (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing