从命令行部署多个配置,而无需更改项目文件



请不要太苛刻,因为我还没有完全正确地掌握这一点,但是msbuild/msdeploy最近给了我一些头痛。希望有人能提供阿司匹林的文字证明?这就是我要做的:

  • 我有一个web应用程序项目,它有多个配置,因此有多个web.config-transform .

  • 我想从命令行部署这个项目。

  • 我宁愿不修改它的项目文件。(我希望能够做到这一点为几个web应用程序,所以至少尽可能编辑是非常感激)

  • 我希望能够只构建一次,然后从它部署不同的配置。

到目前为止,我从命令行使用如下命令进行部署:
msbuild D:pathToFileDeployVariation01.csproj
        /p:Configuration=Debug;
        Platform=AnyCpu;
        DeployOnBuild=true;
        DeployTarget=MSDeployPublish;
        MSDeployServiceURL="localhost";
        DeployIisAppPath="DeployApp/DeployThis01";
        MSDeployPublishMethod=InProc

这就执行了我想要的,除了它只部署了"调试"配置。如何通过最小的调整,让它也部署我的其他配置?

我在想也许我可以构建一个包,其中包括我所有的配置,然后从部署,并决定"同时部署"哪一个配置部署?不幸的是,我几乎被困在这里,我读过的所有方法似乎都需要对项目文件进行一些修改,有没有一种方法可以解决这个问题?

更新:我还没有真正到达我想在这里的地方:)。

但是我研究了这个packageweb方法(这里也有关于它的有趣视频),它看起来很不错;我现在可以构建一个包含所有转换的包,然后根据需要随时将其部署到多个配置中。

我不喜欢的一件事是,我必须将我的密码以明文形式存储到powershell脚本生成的参数文件中,有人知道解决这个问题的方法吗?我真的宁愿有一个加密的密码。

我正在研究同样的问题,并且正在使用Microsoft Web Deploy或MSDeploy(现在是3.0版本)采取两条路径。

我首先使用MSBUILD使用在系统中传递的包目标编译项目。配置,system.packagelocation。Package Target生成一组包文件,包括一个{PackageName}. setparameters .xml文件。默认情况下,使用msdeploy.exe发布文件时,SetParameters.xml文件允许在发布时对ConnectionStrings进行更改,而无需重新编译。还可以通过向流程中添加一个parameters.xml文件来定义额外的参数化web,从而定制发布转换流程。可以在部署时更改的配置设置。

在初始构建之后,我使用MSBUILD在Package过程中生成的{PackageName}.deploy.cmd文件将包部署到目标网站。包过程本质上重复了你目前从MSBUILD做的过程,因为我可以发布一个Build-Configuration web。从一次编译进行配置转换。该流程提供了一个一致的部署流程,可以从中央CI环境中瞄准远程服务器,这对于纯部署流程来说非常有用。PackageBuild/Deploy过程在TeamCity中参数化,只需要更改几个参数就可以设置新的部署。

像你一样,我不能,然而,编译一个版本的代码,并部署到多个服务器使用的过程,因为它是目前存在的-这是我目前的重点。我想在持续部署、构建一次部署多次模式中参数化转换到开发、QA、用户测试、阶段和生产。

我预期使用以下两种方法之一:

  1. 为每个项目创建一个parameters .xml文件,定义变量部署参数,并为每个目标部署创建一个自定义{ServerName}. setparameters .xml文件,两者都将与msdeploy.exe一起使用。a.我不确定定义一个参数。xml是一个足够灵活的过程,以满足我的需求,因为当前的项目插入和删除一个可变数量的web。配置设置。实现一个包含所有变量的参数文件对我来说可能太复杂了。我还将最终创建所有的目标转换,而不是当前开发人员发起的过程。不是最理想的。

  2. 我正在跟进VS2012 Web Tools 2012.2的最新更新,该更新允许绑定Web。配置转换到发布配置文件(profile.pubxml)现在存储在VS2012中的SolutionName/Properties/PublishProfiles下。

VS2012 release 2012.2增加了创建与发布配置文件绑定的第二个转换的功能。生成的转换过程首先运行构建配置转换,然后是发布转换,即Release转换,然后是TargetServer转换。Sayed Hashimi在YouTube上有一个很棒的视频,展示了使用MSBUILD的整个过程。

尚不完全清楚的是,第二个转换是否与使用MSDeploy在持续部署、构建一次部署多次模式中的构建分开支持,或者发布转换是否仅在每个目标转换的单独包/构建期间得到支持。

选项1肯定适用于某些环境,并且是我处理持续部署过程的第一个计划。如果可能的话,我宁愿使用Web Transforms来完成这个过程。

第三种可能性是使用几个能够转换web的CodePlex命令行项目之一。使用XDT转换引擎配置。不幸的是,使用这些工具意味着将结果拼接到Build/Package MSBUILD过程中,以获得最终的web。配置转换到部署包中——这是我还没有成功完成的。Sayed Hashimi在2012年也有一个PackageWeb项目,可能也能起到同样的作用。我希望他最近的工作取代了packageweb解决方案中涉及的额外步骤的需要。

如果你决定了一个解决方案,请告诉我——因为我肯定很感兴趣。

最新更新