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

时间:2013-05-07 12:08:07

标签: msbuild web-deployment msdeploy webdeploy

请不要过于苛刻,因为我还没有完全正确地理解这一点,但msbuild / msdeploy最近给了我一些麻烦。 希望有人可以提供某种文字的阿司匹林吗?所以这就是我想要做的事情:

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

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

  • 我宁愿不想修改其项目文件。 (我希望能够为多个Web应用程序执行此操作,以便尽可能少地进行编辑)

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

到目前为止,我使用以下命令从命令行部署:

msbuild D:\pathToFile\DeployVariation01.csproj
        /p:Configuration=Debug;
        Platform=AnyCpu;
        DeployOnBuild=true;
        DeployTarget=MSDeployPublish;
        MSDeployServiceURL="localhost";
        DeployIisAppPath="DeployApp/DeployThis01";
        MSDeployPublishMethod=InProc

这只是我想要的,除了它只部署" Debug" -Configuration。 如何通过最少的调整使其部署我的其他配置?

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

更新: 我仍然不是真正想去的地方:)。

但是我调查了这个PackageWeb-approach(也有关于here的有趣视频),看起来很不错;我现在可以构建一个包含所有变换的包,然后根据需要将其部署到多个配置中。

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

还有其他方法可以解决我原来的问题。

1 个答案:

答案 0 :(得分:0)

我正在处理同样的问题,我正在使用Microsoft Web Deploy或MSDeploy(现在是3.0版)中的两条路径。

我首先使用MSBUILD编译项目,使用传递system.configuration,system.packagelocation的Package目标。 Package Target生成一组包文件,包括{PackageName} .SetParameters.xml文件。默认情况下,SetParameters.xml文件允许在使用msdeploy.exe发布文件时对ConnectionStrings进行on-publish更改,而无需重新编译。还可以通过将parameters.xml文件添加到进程来定义发布转换过程,该文件定义可在部署时更改的其他参数化web.config设置。

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

与您一样,我不能编译单个版本的代码并使用当前存在的流程部署到多个服务器 - 这是我目前关注的焦点。我希望将持续部署,build-once-deploy-many模式中的转换参数化为Dev,QA,User Testing,Staging和Production。

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

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

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

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

    还不完全清楚的是,第二个转换是否与在持续部署中使用MSDeploy构建,build-once-deploy-many Pattern单独支持,或者是否仅在单独的Package / Build期间支持发布转换每个目标转型。

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

    外部第三种可能性是使用几个能够使用XDT转换引擎转换web.config的CodePlex命令行项目之一。不幸的是,使用这些工具意味着将结果拼接到Build / Package MSBUILD进程中,以便将生成的web.config转换到部署包中 - 这是我尚未成功完成的。 Sayed Hashimi也有一个2012年的PackageWeb项目也可以。我希望他最近的工作取代了对packageweb解决方案中涉及的额外步骤的需求。

    如果您决定解决方案,请告诉我 - 因为我非常感兴趣。