尝试使用MSDeploy"runCommand"提供程序在远程计算机上执行.cmd文件时,我们遇到错误.预期的运行时间应该是大约10秒,但MSDeploy只运行它大约2-3秒,之后返回错误详细信息.
这是我正在使用的完整的MSDeploy"runCommand"命令行文本:
以下是返回的错误详细信息:
关于为什么会发生这种情况以及如何解决它的任何想法?
我已经将TFS 2010配置为进行构建并利用MSBuild参数,将其部署到单个服务器而没有任何问题.
/p:DeployOnBuild=True
/p:Configuration=Development
/p:DeployTarget=MSDeployPublish
/p:MSDeployPublishMethod=RemoteAgent
/p:MsDeployServiceUrl=http://<insert>/msdeployagentservice
/p:username=<insert>
/p:password=<insert>
Run Code Online (Sandbox Code Playgroud)
但是,现在我想在构建之后部署到多台机器.我不确定是否有一些内置的机制来执行此操作,或者我是否应该调用一个进程来启动批处理文件来执行此部署,然后执行同步?我希望保持整洁.
例如,我可以有两个构建定义,每个服务器一个,但这看起来很愚蠢.我希望在没有太多外部自定义的情况下,只在一次失败中构建两台服务器.
在我的开发笔记本电脑上,我只安装了VS2012 RC,并且我成功地从powershell(通过psake)挂钩到新的MSDeploy .pubxml管道(DeployOnBuild和PublishProfile设置),以将我的网站部署到我们的测试服务器.
但是,在我的构建服务器上,我最初安装了VS2010 SP1,而且我现在另外安装了2012 RC(我在这台机器上还有其他版本仍然是.NET 4).
当使用完全相同的参数运行相同的脚本时,我看到我的开发机器和构建服务器之间的结果不同.我正在运行的命令是
exec { msbuild "Website\WebSite.csproj" /m p:DeployOnBuild=True /p:PublishProfile=MyTestProfile }
Run Code Online (Sandbox Code Playgroud)
在构建服务器上,这实际上并不触发MSDeploy,而只是触发站点压缩并创建部署包的打包位.我的机器成功选择了pubxml文件并成功部署.
最后,我相信我已将问题追溯到文件Microsoft.Web.Publishing.targets.在我的开发机器上我只有
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web
Run Code Online (Sandbox Code Playgroud)
但服务器还有
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web
Run Code Online (Sandbox Code Playgroud)
看起来这个文件(不知道.pubxml的东西)就是那里使用的东西.
有没有人知道我需要翻动什么(最好在我自己的msbuild文件中,所以我不搞砸4.0版本的构建服务器上的任何其他东西)让msbuild拿起v11.0版本的文件和从而使用我的.pubxml文件?
我正在尝试运行由参数/p:DeployOnBuild=True传递时由MSBuild生成的ProjectName.deply.cmd .其中一个参数"ComputerName"将被传递为https://WebServer01:8172/MSDeploy.axd?SiteName=MySiteName.我的命令行是
ProjectName.deploy.cmd /Y /M:https://WebServer01:8172/MSDeploy.axd?Site=MySiteName
-AllowUntrusted /U:DeployUserName /P:Password /A:Basic
Run Code Online (Sandbox Code Playgroud)
它回来了
Error: Unrecognized argument 'MySiteName'. All arguments must begin with "-".
Run Code Online (Sandbox Code Playgroud)
执行的实际命令是
"C:\Program Files\IIS\Microsoft Web Deploy V3\\msdeploy.exe"
-source:package='Y:\ProjectName.zip'
-dest:auto,computerName='https://WebServer01:8172/MSDeploy.axd?Site',userName='DeployUserName',password='Password',authtype='Basic',includeAcls='False'
-verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"Y:\ProjectName.SetParameters.xml"
MySiteName
-AllowUntrusted
Run Code Online (Sandbox Code Playgroud)
请注意,/ M的参数https://WebServer01:8172/MSDeploy.axd?Site=MySiteName被拆分为两个参数,从而创建computerName='https://WebServer01:8172/MSDeploy.axd?Site'和附加参数MySiteName.
我已经完成运行带有引用参数的部署包在Visual Studio 2010 Service Pack 1中失败,但是只处理ArgMsDeployAdditionalFlags而不是参数,例如/M:ComputerName.
如果没有传递SiteName,我可以使用在服务器上具有管理员权限的用户进行部署,但是当使用标准IIS用户DeployUserName时,我得到401
ProjectName.deploy.cmd /Y /M:https://WebServer01:8172/MSDeploy.axd
-AllowUntrusted /U:DeployUserName /P:Password /A:Basic
Run Code Online (Sandbox Code Playgroud)
服务器返回401
Error Code: ERROR_USER_UNAUTHORIZED
More Information: Connected to the remote computer ("WebServer01") using …Run Code Online (Sandbox Code Playgroud) 所以我的部署工作在构建上,我已经设置了我的构建来创建部署包并在目标服务器上执行包.到目前为止很棒.现在应用程序正在扩展,我需要为每台机器配置不同的配置(帐户名称等),
我可以指定"setParameters.xml"的文件名,例如"Server1.SetParameters.xml"或类似名称吗?
我现在已经让它在每次部署之前通过SetParameters.xml复制文件,但看起来很优雅,并且文件会被锁定,因为它会将错误的设置部署到错误的服务器.
所以我有以下要求:1.编译一个大型MVC应用程序并预编译其所有视图.2.运行web.config的转换3.打包并发布以部署到Azure Web角色
我可以使用修改后的proj文件执行1,如果我使用msdeploy,则可以执行2次,当使用VS 2012 Azure工具时,3可以正常工作.现在我想把这些全部放在一个脚本化的过程中.
有人已经完成了这项工作吗?
我有一个IIS Web应用程序,其结构大致类似于:
wwww.mysite.com
file1.asp
file2.asp
\DotNet
file3.aspx
file3.aspx
Run Code Online (Sandbox Code Playgroud)
我们正在设置TeamCity来进行自动部署.我有一个MSBuild构建步骤,部署到\ DotNet文件夹(aspx文件),并在一个单独的构建配置中,我有另一个MSBuild构建步骤,部署到根(asp文件).
我想允许MSDeploy删除不必要的文件,例如,如果我从VCS中删除file2.asp,我希望它从目标IIS服务器中删除它.
但是,我不希望它擦除\ DotNet子文件夹.
我可以获得比命令行开关"SkipExtraFilesOnServer"更精细的东西,或者这是一个全有或全无的交易?
我有一个ASP.NET 3.5 Web应用程序项目.我想将大部分内容部署到我的Web服务器上,但我想将CSS,图像和JavaScript部署到第二个"图像服务器".
如何使用Web Deploy,甚至Visual Studio 2010及更高版本的"发布"功能来实现此目的?
有人问我试过了什么.我没有尝试任何东西,因为我不知道有什么可尝试的.
我过去在Web部署方面做过一些认真的工作.我甚至使用Web Deploy来部署非Web应用程序,方法是将相应的目标手动添加到项目文件中.我有MSBUILD书(" 在Microsoft®构建引擎内部:使用MSBuild和Team Foundation Build ",由Sayed Ibrahim Hashimi和William Bartholomew 撰写)和补充,并且知道如何处理诸如向MSDEPLOY包添加额外文件之类的内容.不在项目中,添加文件夹,设置访问保护等.
我不知道该怎么做是从一个项目制作两个包,然后将这两个包部署到两个单独的服务器.
这是我可以尝试的两件事.在我的(是的,专家的)意见中,既不值得花时间.我很乐意有人告诉我我错了.
Visual Studio中的发布配置文件不仅包括有关要发布的文件和目标的信息.它还包括构建和部署的解决方案配置.我也可以
ItemGroup包含内容的元素上.实际上,单个项目将成为两个项目,具体取决于解决方案配置.我不应该说明每次将新项目添加到项目时手动编辑项目文件是多么不切实际.我认为没有实际的方法可以做我需要做的事情.我希望有人知道我不了解的实用技术 - 也许是我不知道的Web Deploy 3.5的一些功能.
参考SamStephens撰写的这篇文章和Sayed的这篇文章,在使用Visual Studio 2012 构建 LOCALLY时,我已经设法在打包期间包含其他依赖文件.
当我在TFS中构建代码时,问题就开始了.查看日志,看起来似乎没有挂上CopyAllFilesToSingleFolderForMsdeployDependsOn.
CopyAllFilesToSingleFolderForMsdeployDependsOn =
;
;
CopyAllFilesToSingleFolderForPackageDependsOn =
;
;
Run Code Online (Sandbox Code Playgroud)
所以我有一个带有CreatePackage.targets文件的Deployment.csproj,在这个目标文件中,它将构建Web应用程序项目.以下是该文件的片段,我将前面所述的两篇文章中的内容结合起来.
<!-- Create Web Deploy package for local build. -->
<Target Name="WebPackage" Condition="'$(TfsBuild)' == ''">
<!-- MSBuild the project. -->
<MSBuild Projects="..\webapplication.csproj"
Targets="Package"
Properties="
Platform=$(Platform);
VisualStudioVersion=$(VisualStudioVersion);
Configuration=$(Configuration);
WebPublishMethod=Package;
ExcludeApp_Data=false;
DeployOnBuild=true;
DeployTarget=Package;
PackageAsSingleFile=true;
PackageLocation=$(PackageOutputDirectory);
PublishProfile=$(MSBuildThisFileFullPath);
ExcludeFoldersFromDeployment=Scripts;
ExcludeFilesFromDeployment=parameters.xml;">
</MSBuild>
</Target>
<PropertyGroup>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
DefineAssemblies;
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
<AssemblySource Condition="'$(TfsBuild)' == ''">$(SolutionDir)\ProjectA\bin\$(Configuration)\ProjectA.dll</AssemblySource>
<AssemblySource Condition="'$(TfsBuild)' == 'true'">$(OutputDirectory)ProjectA.dll</AssemblySource>
<Target Name="DefineAssemblies">
<ItemGroup>
<FilesToInclude Include="$(AssemblySource)">
<Dir>lib</Dir>
</FilesToInclude > …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下msdeploy命令部署我的应用程序:
MSDeploy.exe -source:contentPath="C:\Users\myUser\Documents\ui\dist" -dest:contentPath='c:/inetpub/wwwroot/dist',computerName="https://ec2-xx-xxx-xx-xx.ap-northeast-1.compute.amazonaws.com:8172/MSDeploy.axd?site=Default Web Site",username="administrator",password="XXXXXXXXX",authtype="Basic",includeAcls="False" -verb:sync -allowUntrusted
Run Code Online (Sandbox Code Playgroud)
收到以下错误:
Working...
Info: Using ID '01657062-cece-4713-8dc6-585537b265fd' for connections to the rem
ote server.
>> Error Code: ERROR_DESTINATION_NOT_REACHABLE
>> More Information: Could not connect to the remote computer ("ec2-52-207-222-6
5.compute-1.amazonaws.com"). On the remote computer, make sure that Web Deploy i
s installed and that the required process ("Web Management Service") is started.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION
_NOT_REACHABLE.
>> Error: Unable to connect to the remote server
>> Error: A connection attempt failed because …Run Code Online (Sandbox Code Playgroud) msdeploy ×10
msbuild ×5
deployment ×2
tfs2010 ×2
asp.net ×1
asp.net-mvc ×1
azure ×1
command-line ×1
teamcity ×1
tfs ×1
timeout ×1
webdeploy ×1