【问题标题】:How to MSDeploy a built website package to a virgin IIS website如何将构建的网站包 MSDeploy 到原始 IIS 网站
【发布时间】:2011-04-08 00:31:00
【问题描述】:

我正在尝试自动化我们的构建/部署过程。

到目前为止我正在使用:

  • 一个带有主 Web 应用程序项目(和依赖项目)的 Visual Studio 2010 解决方案
  • MSBuild
  • MSDeploy
  • CruiseControl.Net

因此,经过多次争论和咬牙切齿,我现在让 CCNet 启动了一个 MSBuild 脚本来构建、打包和部署网站。 MSBuild 脚本如下:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.sln"
                    Targets="Clean;Rebuild"
                    Properties="Configuration=$(Configuration)"
    />
</Target>

<!--<Target Name="Test" DependsOnTargets="Build">
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.Web.Tests\Product.Web.Tests.csproj"
                    Properties="Configuration=$(Configuration);OutputPath=$(CCNetArtifactDirectory)\Tests\" />
    <Exec Command="$(MSTestPath) /testcontainer:$(CCNetArtifactDirectory)\Tests\Product.Web.Tests.dll /runconfig:$(CCNetWorkingDirectory)\src\Local.testsettings" ContinueOnError="false" />
</Target>-->

<Target Name="Package" DependsOnTargets="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.Web\Product.Web.csproj"
                    Targets="Package"
                    Properties="Configuration=$(Configuration);PackageLocation=$(PackageDir)\Product.zip"
    />
</Target>

<Target Name="Deploy" DependsOnTargets="Package">
    <Exec Command="&quot;$(MSDeployPath)&quot; -source:package='$(PackageDir)\Product.zip' -dest:auto,computerName='$(MSDeployComputerName)',includeAcls='False' -verb:sync -setParamFile:$(PackageDir)\Product.SetParameters.xml" ContinueOnError="false" />
</Target>

只要在目标机器上已经有一个在 IIS 中配置的网站,这一切都可以正常工作。这不需要是现有的“真实”站点(它可能只是一个外壳)。

虽然这很棒,但我真的希望 MSDeploy 能够自动创建网站,因为它似乎可以使用 Web 应用程序。这可能吗?如果有任何帮助,我们将不胜感激!

【问题讨论】:

    标签: asp.net msbuild cruisecontrol.net msdeploy


    【解决方案1】:

    很确定 MSDeploy 无法做到这一点。我过去做过的一件事是有一个 Exec 任务调用 appcmd.exe 来拆除/建立一个新网站。 MSBuild Community TasksMSBuild Extension Pack 一样有一些网站功能。

    【讨论】:

    • 这也是我发现的 - 我使用了 msdeploy -verb:sync -source:runCommand=c:\mycommand.bat,computername=MyServer -dest:auto,其中 mycommand.bat 包含appcmd.exe 命令在 IIS 中创建新站点
    【解决方案2】:

    MSDeploy 有这个能力,你只需要钩住正确的提供者。

    例如,您在目标中使用“auto”提供程序,这基本上表示目标将与您正在设置的源相同(或兼容)作为一个包。由于包没有指定其托管环境,因此 msdeploy 不会尝试对其进行任何操作,它基本上只是从包中复制文件。

    你正在调用 auto in ("-dest: auto"):

    -dest:auto,computerName='$(MSDeployComputerName)'
    

    要让 msdeploy 创建网站,您需要使用更具体的提供商,该提供商了解“网站”和“应用”的概念,以及他们如何将包用作网站元素的内容。

    我有一段时间没有这样做了,所以我不想详细说明(因为我可能会误导你),但请查看有关 msdeploy 提供程序的 MSDN 文档。

    第一次查看自动,您的当前设置。然后看看 iisAppappHostconfig

    http://technet.microsoft.com/en-us/library/dd569040(WS.10).aspx

    如果使用得当,我相信这两个中的一个会为您创建网站/应用程序,并会为您提供所需的结果。

    【讨论】:

    • appHostConfig 可以将 IIS 配置复制到目标服务器上的新站点,但我认为它不能在没有源可复制的情况下在目标服务器上从头开始创建新站点。
    • 是的,当时我不记得了,所以我列出了 iisApp 和 appHostConfig。 iisApp 提供程序挂钩 createApp 提供程序,它应该创建站点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2017-07-22
    相关资源
    最近更新 更多