我有一个Web Deploy 3.5软件包,我想部署到远程服务器.如何在MSDeploy.exe命令行上指定站点的名称?
这是我到目前为止所拥有的:
C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe
-source:package='package.zip'
-dest:auto,computerName="ServerName",includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"package.SetParameters.xml"
Run Code Online (Sandbox Code Playgroud)
但是该文件的名称是在package.SetParamters.xml文件中指定的,我更喜欢在命令行中设置它.我想部署此软件包的一些地方是位于同一服务器上的不同站点,例如我们的Stage和UAT站点.
我已经看过使用这里描述的iisApp和appHostConfig提供程序:http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx
但是我在将这些与包文件结合使用时遇到了麻烦.
我显然不知道自己在做什么.
我终于得到了这个PowerShell命令.但我无法弄清楚它为什么会起作用.
我担心的是最后的""角色:
&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" `
-verb:sync `
-source:contentPath="$build_directory\deploy" `
-dest:contentPath="$server_temp_directory,computerName=$server,username=$server_username,password=$server_password" `
-verbose `
-postSync=runCommand="powershell -NoLogo -NoProfile -Command $server_temp_directory\remotetasks.ps1 Deploy""
Run Code Online (Sandbox Code Playgroud)
为什么我需要双重双引号?
我的IDE(PowerGUI)说线路没有正确结束,但这是我可以按需要运行命令的唯一方法.
是什么,我 - 和IDE - 不知道在PowerShell中进行qouting?
echoargs的一点输出:
如果我跑:
echoargs -postSync=runCommand="powershell -NoLogo -NoProfile -Command $server_temp_directory\remotetasks.ps1 Deploy""
Run Code Online (Sandbox Code Playgroud)
我明白了:
Arg 0 is <-postSync=runCommand=powershell -NoLogo -NoProfile -Command \remotetasks.ps1 Deploy>
Run Code Online (Sandbox Code Playgroud)
如果我在没有双引号的情况下运行,我得到:
Arg 0 is <-postSync=runCommand=powershell>
Arg 1 is <-NoLogo>
Arg 2 is <-NoProfile>
Arg 3 is <-Command>
Arg 4 is <\remotetasks.ps1>
Arg 5 is <Deploy>
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的是,上面的命令只有在最后一个参数中使用=而不是:时才有效.
这不起作用:
-postSync:runCommand="powershell -NoLogo -NoProfile -Command $server_temp_directory\remotetasks.ps1 …Run Code Online (Sandbox Code Playgroud) 在微软的AJAX Minifier提供了一个构建任务,可以在TFS或本地构建定义使用.
我在本地项目文件(构建到单独的文件)和TFS构建定义(覆盖现有的JS文件)中都使用了这个.
我想转而使用Visual Studio 2010的一键发布功能而不是TFS构建定义,但是在项目文件中将缩小任务添加为AfterBuild目标似乎不会影响单击发布功能.
使用此线程和这些 文章中的信息,我尝试在我的WAP根目录中创建一个名为"[ProjectName] .wpp.targets的文件,并使用以下XML:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<Target Name="Minify" BeforeTargets="MSDeployPublish">
<ItemGroup>
<JS Include="**\*.js" Exclude="**\*.min.js;**\*vsddoc.js;**\*debug.js" />
</ItemGroup>
<ItemGroup>
<CSS Include="**\*.css" Exclude="**\*.min.css" />
</ItemGroup>
<AjaxMin JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" CssSourceFiles="@(CSS)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".min.css" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
这似乎没有任何效果,不幸的是,Visual Studio对这些工具的反馈或调试信息没有太多帮助.
有没有人使用Visual Studio 2010一键发布功能来缩小JavaScript/CSS?
我在将MsBuild package + deploy命令分成两个单独的命令时遇到了一些问题.(我需要这样做才能将其他参数传递给MsDeploy).
工作正常的命令如下所示:
msbuild "src\Solution.sln"
/P:Configuration=Deploy-Staging
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=https://192.168.0.1:8172/MsDeploy.axd
/P:DeployIISAppPath=staging.website.com
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WmSvc
/P:CreatePackageOnPublish=True
/P:UserName=staging-deploy
/P:Password=xyz
Run Code Online (Sandbox Code Playgroud)
分离的打包命令如下所示:
msbuild "src\Solution.sln"
/P:Configuration=Deploy-Staging
/P:DeployOnBuild=True
/P:DeployTarget=Package
/P:_PackageTempDir=C:\temp\web
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.但接下来是MsDeploy部分:
msdeploy
-verb:sync
-allowUntrusted
-usechecksum
-source:manifest=
'src\WebProject\obj\Deploy-Staging\Package\WebProject.SourceManifest.xml'
-dest:auto,ComputerName=
'https://192.168.0.1:8172/MsDeploy.axd?site=staging.website.com',
username='staging-deploy',password='xyz',authType='basic',includeAcls='false'
-enableRule:DoNotDeleteRule
Run Code Online (Sandbox Code Playgroud)
失败,WmSvc.log中出现以下错误
wmsvc.exe Error: 0 : Attempted to perform an unauthorized operation.
setAcl/C:\temp\web (Read)
ProcessId=15784
ThreadId=31
DateTime=2011-03-30T14:57:02.4867689Z
Timestamp=3802908721815
wmsvc.exe Error: 0 : Not authorized.
Details: No rule was found that could authorize user 'staging-deploy',
provider 'setAcl', operation 'Read', path 'C:\temp\web'.
Run Code Online (Sandbox Code Playgroud)
(还有几个读/写操作)
它试图访问的路径显然出现了问题(因为它可以正常使用其他方法) - 我不确定它是否正在尝试正确使用iisApp定位,而且目前我认为没有正确的网络.config也将被部署.
免责声明:我知道如果我选中"在目的地保留额外文件"复选框,我可以保留文件夹权限,但我不想这样做.
也就是说,有没有办法让Visual Studio 2010中的一键式Web发布保留远程服务器上文件夹的权限?
具体来说,我希望应用程序池帐户具有对App_Data文件夹的修改权限,但在发布过程中始终会重置权限.
asp.net iis visual-studio-2010 msdeploy one-click-web-publishing
我通常把我的连接字符串放到一个单独的文件中,在web.config中添加这样的东西:
<connectionStrings configSource="WebConnection.config" />
Run Code Online (Sandbox Code Playgroud)
我刚刚安装了VS 2012,它会自动获取我现有的发布设置.但是,当我进行网络发布时,它现在自己添加了两个连接字符串,因此部署目标上的web.config现在看起来像这样:
<connectionStrings configSource="WebConnection.config">
<add name="EF.Model.DbContext" connectionString="EF.Model.DbContext_ConnectionString" providerName="System.Data.SqlClient" />
<add name="Migrations.Db.MigrationDb" connectionString="Migrations.Db.MigrationDb_ConnectionString" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
当然,这会产生错误(使用时节点内容必须为空configSource).我注意到,在新生成的.pubxml文件(现在存储发布设置)中有以下几行:
<ItemGroup>
<_ConnectionStringsToInsert Include="EF.Model.DbContext" />
<_ConnectionStringsToInsert Include="Migrations.Db.MigrationDb" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我该如何删除它们?:)如果我从文件中删除它们,Web-publish对话框会在我编辑发布设置时随时添加它们.
msdeploy one-click-web-publishing webdeploy visual-studio-2012
我已经调查了两个.想了解哪一个更适合在多个服务器上进行自动化Web部署.
我正在寻找类似Powershell脚本的东西来检查是否安装了msdeploy,如果是,那么是什么版本
我考虑过检查"c:\ Program Files\IIS"并检查那里的MSDeploy安装,但是这总是保证是安装位置吗?
我需要这个在任何给定的服务器机器上工作
我试图从命令行msdeploy执行,例如以下命令:
"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync
-source:package="Templates\TemplateAppPool.zip"
-dest:appPoolConfig="MyAppPool",computerName="...",userName="...",password="..."
-replace:objectName=processModel,targetAttributeName=idleTimeout,replace=00:45:00
-replace:objectName=add,targetAttributeName=managedPipelineMode,replace=Integrated
-allowUntrusted
Run Code Online (Sandbox Code Playgroud)
并得到以下错误
Info: Using ID '0b2ec654-ae21-4848-897d-f644d95b4bfa' for connections
to the remote server.
Error Code: ERROR_CONNECTION_TERMINATED
More Information: Web Deploy experienced a connection problem with
the server and had to terminate the connection. Contact your server
administrator if the problem persists. Learn more at:
http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_CONNECTION_TERMINATED
Run Code Online (Sandbox Code Playgroud)
我添加了-allowUntrusted以防止目标计算机上的证书可能出错.因为当我尝试从VS 2013中执行此操作时,它会向我显示有关目标计算机上的证书的错误/警告.无论如何,我接受了错误的证书,它进一步说连接是可以的,但是
当我尝试从VS 2013发布时,我得到了关注
Start Web Deploy Publish the Application/package to
https://remotehost:8172/msdeploy.axd?site=Default%20Web%20Site ...
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets(4193,5):
Error : Web deployment task failed. (Unknown ProviderOption:DefiningProjectFullPath.
Known …Run Code Online (Sandbox Code Playgroud) 我们正在尝试在构建部署系统中集成"构建一次,随处部署"模型.
MSDeploy为此创造了奇迹,通过CRC校验和比较显着缩短了构建时间,并且(在大多数情况下)使用参数化来根据我们部署的环境更改应用程序web.configs时,它也能正常工作.
我将这些参数中的大多数固定下来,但是无论我在parameters.xml文件中调用它们有多少种不同的方式,一些元素和属性似乎永远不会改变.我已经概述了三个这样的例子,这里是我试图改变的web.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DbConnectionString" connectionString="Data Source=null;Initial Catalog=null;Trusted_Connection=no;User ID=user1;Password=pass*9;" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<customErrors mode="On" defaultRedirect="/Library/Error/PageNotFound.aspx">
</customErrors>
</system.web>
<applicationSettings>
<settings>
<setting name="service_Address" serializeAs="String">
<value></value>
</setting>
<settings>
</applicationSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是parameters.xml文件:
<parameter name="DbConnectionString" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@name='DbConnectionString']/@connectionString" />
</parameter>
<parameter name="customErrorsMode" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="configuration/system.web/customErrors/@mode" />
</parameter>
<parameter name="service_Address" defaultValue="">
<parameterEntry kind="XmlFile" scope="\\web.config$" match="/configuration/applicationSettings/aim.Web.Properties.Settings/setting[@name='service_Address']/value" />
</parameter>
Run Code Online (Sandbox Code Playgroud)
这是相应的setParameters.xml文件:
<setParameter name="DbConnectionString" value="Data Source=dbserver;Initial Catalog=DB1;Trusted_Connection=no;User ID=user1;Password=pass*9;"/>
<setParameter name="customErrorsMode" value="Off"/>
<setParameter name="service_Address" value="https://myservice.asmx"/>
Run Code Online (Sandbox Code Playgroud)
我测试了每个XPath表达式,结果与任何其他工作参数完全相同,但上面似乎永远不会改变.
有没有人看到我在这里丢失的任何明显的东西?
msdeploy ×10
webdeploy ×6
msbuild ×2
powershell ×2
teamcity ×2
.net ×1
asp.net ×1
deployment ×1
iis ×1
psake ×1
web-config ×1
xpath ×1