在 Visual Studio Team Services/VSTS 中基于“IIS 网站部署”模板集进行简单的两步发布定义,以配置应用程序池(v4、集成、应用程序池标识)和网站(http、192.168.0) .xxx LAN IP、端口 80、有效主机名),这引发了一个错误,我一直在努力寻找任何详细信息。将问题隔离到某些 AppCmd 参数,但似乎无法通过步骤设置删除它们。
通过 VSTS 代理 v2.127.0 部署到 2008 R2 目标,该代理安装时没有任何问题,但 AppCmd 在“IIS Web 应用程序管理”步骤中始终失败(在重新配置应用程序池、创建目录等后没有问题),然后退出并显示代码 8
hresult 80070008, Failed to commit configuration changes. Not enough storage is available to process this command.
下面是完整日志,但此行导致错误
"C:\Windows\system32\inetsrv\appcmd.exe" set site /site.name:"Example - Website Name" -applicationDefaults.applicationPool:"Example - AppPool Name" -[path='/'].[path='/'].physicalPath:"D:\Test\Example - Website Name" -[path='/'].[path='/'].userName: -[path='/'].[path='/'].password:
直接在目标上运行它会产生相同的错误,如果我去掉空白的用户名和密码参数,它就会起作用。经检查,我们没有尝试针对网站设置凭据和身份验证设置组合,并且这两个参数不会消失或以不会引发错误的方式格式化。
尝试搜索类似的问题,但毫无结果,重新启动目标以防内存问题,甚至尝试构建仅网站的步骤,但错误仍然存在。
##[section]Starting: Configure IIS AppPool & Website
==============================================================================
Task : IIS Web App Manage
Description : Create or update a Website, Web App, Virtual Directories, and Application Pool
Version : 0.5.4
Author : Microsoft Corporation
Help : [More Information](https://go.microsoft.com/fwlink/?linkid=839731)
==============================================================================
##[command]"C:\Windows\system32\inetsrv\appcmd.exe" list apppool /name:"Example - AppPool Name"
##[command]"C:\Windows\system32\inetsrv\appcmd.exe" set apppool /apppool.name:"Example - AppPool Name" -managedRuntimeVersion:v4.0 -managedPipelineMode:Integrated -processModel.identityType:ApplicationPoolIdentity
APPPOOL object "Example - AppPool Name" changed
##[command]"C:\Windows\system32\inetsrv\appcmd.exe" list site /name:"Example - Website Name"
##[command]"C:\Windows\system32\inetsrv\appcmd.exe" add site /name:"Example - Website Name" /physicalPath:"D:\Test\Example - Website Name"
SITE object "Example - Website Name" added
APP object "Example - Website Name/" added
VDIR object "Example - Website Name/" added
##[command]"C:\Windows\system32\inetsrv\appcmd.exe" set site /site.name:"Example - Website Name" -applicationDefaults.applicationPool:"Example - AppPool Name" -[path='/'].[path='/'].physicalPath:"D:\Test\Example - Website Name" -[path='/'].[path='/'].userName: -[path='/'].[path='/'].password:
SITE object "Example - Website Name" changed
ERROR ( hresult:80070008, message:Failed to commit configuration changes.
Not enough storage is available to process this command.
)
##[error]Process 'appcmd.exe' exited with code '8'.
##[section]Finishing: Configure IIS AppPool & Website
最佳答案
与 MS 开发人员支持讨论后,我的问题似乎是目标服务器的 applicationHost.config 加密/安全 key 问题,由于 AppCmd 返回的不太有用的错误消息而变得复杂
p>验证 applicationHost.config 是否有问题的最简单方法是在恢复到 applicationHost.config 的原始默认副本 (C:\Windows\System32\inetsrv\config) 之前备份当前配置,然后重新启动 W3SVC服务 - 能够执行“IIS Web 应用程序管理”步骤,之后没有任何问题。
不幸的是,保持其恢复状态不是一个选项,因此比较了配置的两个版本,发现两个 key 具有不同的 sessionKey
<configuration><configProtectedData><providers>
中的值
将突出显示的键( AesProvider
和 IISWASOnlyAesProvider
)的版本从我们的干净配置复制到当前版本,重新启动 W3SVC 服务,并且相同的 AppCmd 行能够成功运行。
将继续监控,因为这种情况仅发生在物理内部开发服务器上,applicationHost.config 在使用过程中可能会以多种潜在方式意外更改 - 这些都不应应用于生产系统。
关于azure-devops - 使用 AppCmd "IIS Web App Manage"在 "Not enough storage is available to process this command."步骤上进行 VSTS 发布错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48705095/