使用 Azure DevOps 共享部署组,Web 应用程序正在被覆盖,如何最好地调试它?

With an Azure DevOps shared deployment group, web apps are being overwritten, how can one best debug this?

背景

我安装了 on-prem TFS (Azure DevOps) server (version 2018.2) with a single deployment agent

此代理位于 shared deployment group 中,用于部署多个 IIS Web 应用程序,每个应用程序驻留在自己的项目和发布管道中。

发布管道都使用相同的流程,运行 IIS Web App Deployment 模块部署每个应用程序。

deployment parameters 中,每个应用程序都有自己的、唯一的 virtual application 指定。

问题

部署一个应用程序时,它会正确部署到其唯一的虚拟应用程序,但是代理配置为部署的所有其他虚拟应用程序甚至在其他发布管道 被一个应用程序覆盖。

我试过的

  1. 已验证每个 virtual application 参数在配置中实际上是唯一的
  2. 已验证任何给定部署的发布部署日志均未提及任何额外 部署路径。这特别令人困惑,因为日志 该操作正确部署到 只有一个 虚拟应用程序。
  3. 检查目标服务器上是否有任何奇怪的 IIS 日志

问题

调试此类 Azure DevOps 问题的最佳后续步骤是什么?这是一个 on-prem 服务器,所以我拥有比云托管更高级别的访问权限。

我在想也许:

  1. 检查代理版本并更新到最新版本?
  2. 会不会有 其他 有价值信息的日志?在目标服务器上?在 DevOps 服务器上?

我解决了这个问题。请参阅下面的 written-up 过程。

解决方案

问题不在于部署模块,而是我在每个部署模块之前 mis-configured IIS management module 和 运行。每个管理模块都为每个虚拟应用程序设置了相同的 physical path 参数值,这导致每次部署都会覆盖之前的任何部署。

调试过程

在 github 上写了一个相应的问题时,具有讽刺意味的是,有一个 link to instructions for troubleshooting AzureDevops,所以我开始关注那个文档。

  1. turned on verbose logging on the deployment agent 通过将 system.debug 变量添加到发布管道并将其设置为 true
    • 由此我可以看出,实际上没有其他虚拟应用程序被部署到
  2. 我在标题为 _diag 的目录中的代理安装目录下检查了目标服务器上的其他代理日志。
    • 这表明一切正常
  3. 还是不服气,I looked at the source code发现模块做的都是运行MsDeploy。
    • 这让我想知道是否所有的部署都去同一个物理位置
  4. 然后我查看了 IIS management module 的配置,发现我为每个虚拟应用程序设置了相同的物理路径。
  5. 我通过为每个应用程序设置不同的物理路径来测试假设,是的,应用程序不再相互覆盖!