2

请不要太苛刻,因为我还没有完全正确地理解这一点,但是 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

这正是我想要的,除了它只部署“调试”-配置。我怎样才能通过最小的调整使其也部署我的其他配置?

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

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

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

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

其他解决我原来问题的方法仍然值得赞赏。

4

1 回答 1

0

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

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

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

但是,与您一样,我无法编译单个版本的代码并使用当今存在的流程部署到多个服务器 - 这是我目前的重点。我想在持续部署、一次构建多次部署模式中将转换参数化为开发、质量保证、用户测试、登台和生产。

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

  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)。

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

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

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

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

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

于 2013-05-09T22:38:28.133 回答