Web deployment 部署msdeploy iisApp包时未设置应用程序池

Web deployment 部署msdeploy iisApp包时未设置应用程序池,web-deployment,msdeploy,Web Deployment,Msdeploy,我遇到一个问题,msdeploy没有同步站点子应用程序(例如默认网站)的应用程序池信息 本质上,我希望能够创建webdeploy/msdeploy包,作为多个开发分支的夜间构建过程的一部分,然后将这些分支特定的包部署到服务器上进行冒烟测试。所有这些似乎都有道理,但不幸的是,我找不到一种方法来设置部署包的iisApp打算使用的应用程序池。我可以创建和部署包含appPoolConfig提供程序的包,以支持应用程序池本身的创建,但如果我无法在正在部署的应用程序上设置应用程序池,则这是无用的 顺便说一下

我遇到一个问题,msdeploy没有同步站点子应用程序(例如默认网站)的应用程序池信息

本质上,我希望能够创建webdeploy/msdeploy包,作为多个开发分支的夜间构建过程的一部分,然后将这些分支特定的包部署到服务器上进行冒烟测试。所有这些似乎都有道理,但不幸的是,我找不到一种方法来设置部署包的iisApp打算使用的应用程序池。我可以创建和部署包含appPoolConfig提供程序的包,以支持应用程序池本身的创建,但如果我无法在正在部署的应用程序上设置应用程序池,则这是无用的

顺便说一下,我觉得我几乎是在重复其他类似的问题。对于使用appPoolconfig或appPoolExtension,给出了各种各样的答案,但我在这些方面运气不好。从我的阅读中,appPoolConfig用于同步应用程序池本身,而不是“分配”给应用程序的应用程序池。顺便说一句,这种类型的同步操作工作得很好。至于appPoolExtension,当它被打开时,我不知道它实际上做了什么,因为我在生成的包中看不到任何差异

我可以使用一组简单的步骤重新创建问题,这些步骤只使用msdeploy,不使用WPP/webdeploy/msbuild,目的是它应该单独使用最低级别的工具:

Windows 8(注意:我也可以在Win 2008 R2上复制此问题),安装了IIS和Web Deploy 3.0

  • 假设存在默认网站并且安装了.NET4.0,则创建一个名为TestPool的新应用程序池
  • 在默认网站下创建一个名为TestApp的新应用程序,并将其应用程序池分配给步骤1中创建的TestPool
  • 打开具有msdeploy路径访问权限的命令提示符
  • 类型>

    msdeploy -verb:sync -source:iisApp="Default Web Site/TestApp" -dest:package=c:\temp\testapp.zip,encryptPassword="password" -enableLink:AppPoolExtension
    
    <pre>
    <code>
    msdeploy.exe -source:package='mysite.zip' -dest:auto,computerName='https://myserver:8172/MsDeploy.axd',userName='myuser',password='mypwd',authtype='basic' -verb:sync -enableLink:AppPoolExtension -allowUntrusted -setParam:"IIS Web Application Name"="mysite"
    </code>
    </pre>
    
  • 现在我们有了一个包,可以从默认网站下删除TestApp,并删除作为初始应用程序创建一部分创建的任何剩余物理文件夹
  • 假设我们仍然在IIS中将TestPool应用程序池配置为可用池,请键入>

    msdeploy -verb:sync -source:c:\temp\testapp.zip,encryptPassword="password" -dest:iisApp="Default Web Site/TestApp" -enableLink:AppPoolExtension
    
  • 转到IIS管理器并在默认网站下选择我们的TestApp。单击基本设置。。。应用程序池不是必需的测试池,而是默认网站的默认池集
  • 感谢您的帮助

    编辑: 只是在上面的步骤上运行了一个变体,并将msdeploy命令行中的“iisApp”更改为“appHostConfig”,并且保留了应用程序池设置,因此从msdeploy的角度来看,这是成功的。但是,如果这是解决方案,如何通知VS 2012发布流程使用appHostConfig而不是issApp

    编辑:
    在回答我自己的编辑问题时,此答案有效:。这引出了另一个问题,即如何在没有IIS的构建服务器上集成包创建,但我的想法是,首先根据所需的IIS设置、动态参数等创建一个模板包,但基本上没有内容。然后,构建过程将创建一个仅包含内容的包,并将其与模板包同步,以创建用于部署的最终包。

    通过您的编辑,您的问题已变得多方面,但我将一次解决一件事

    只有
    appHostConfig
    提供程序才能创建全局IIS对象,如站点和应用程序池

    iisap
    只是
    createApp
    (可以将目录标记为应用程序)和
    contentPath
    (同步文件/文件夹)的组合

    为了打包/同步
    appHostConfig
    提供程序而不是
    iisApp
    提供程序,您需要做两件事:

  • 将项目文件标记为使用具有有效URL的IIS(通过定义
    WebPublishPipelineWAPProjectSettings
    ,可以覆盖MSBuild文件以检查这些属性)
  • 在发布配置文件中声明一个
    includeIsSettings=true
  • 但是,是的,这需要在生成服务器上安装IIS(或者,至少生成服务器可以访问IIS实例)。毕竟,MSDeploy是一个web同步框架

    您可能要做的是手动生成一个包含您的网站定义的包,以及在构建过程中生成的另一个包含内容的包。但是要小心,因为如果应用程序池包含高级选项,并且包不是由与部署目标相同的IIS版本生成的,则可能会遇到错误


    谢谢Richard。今天我最终决定做一些类似的事情,唯一的区别是对WebAdministration模块使用powershell脚本。该脚本由json格式的简单数据文件驱动,仅用于支持新站点的初始创建。我本可以使用msdeploy和appHostConfig,但我们已经熟悉powershell模块。只需补充一点,我正在使用web deploy publishing创建已创建站点的正常部署的包。