Azure 应用服务部署无法获取资源类型“Microsoft.Web/Sites”的资源 ID

Ruy*_*uiz 30 deployment access-token azure-web-app-service azure-devops azure-pipelines-release-pipeline

在过去的 6 个月中,我一直在使用 Azure DevOps 中的管道进行发布,但今天我收到以下错误:

2019-09-25T14:24:38.4296875Z ##[section]Starting: Azure App Service Deploy: AS-ServiciosNegocio-API-UAT
2019-09-25T14:24:38.4419797Z ==============================================================================
2019-09-25T14:24:38.4419900Z Task         : Azure App Service deploy
2019-09-25T14:24:38.4419986Z Description  : Deploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby
2019-09-25T14:24:38.4420053Z Version      : 3.4.31
2019-09-25T14:24:38.4420117Z Author       : Microsoft Corporation
2019-09-25T14:24:38.4420182Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-rm-web-app-deployment
2019-09-25T14:24:38.4420291Z ==============================================================================
2019-09-25T14:24:39.1630446Z Got connection details for Azure App Service:'AS-ServiciosNegocio-API-UAT'
2019-09-25T14:24:39.3091141Z ##[error]Error: Failed to get resource ID for resource type 'Microsoft.Web/Sites' and resource name 'AS-ServiciosNegocio-API-UAT'. Error: Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.
2019-09-25T14:24:39.3140156Z ##[section]Finishing: Azure App Service Deploy: AS-ServiciosNegocio-API-UAT
Run Code Online (Sandbox Code Playgroud)

ecr*_*345 35

如果您现有的服务连接是“使用服务主体(自动)的Azure 资源管理器”类型(非手动),则有一种简单但不明显的方法来更新令牌。

如其他答案中所述,转到 Azure Devops 中的服务连接设置页面。单击“编辑”,然后单击“保存”而不进行任何其他更改。假设您拥有正确的权限,它将自动获得一个新令牌。

(从这个论坛评论中弄清楚这一点。)

  • 对于该线程的所有其他读者,请阅读 ecraig12345 的答案,以避免很多麻烦。 (11认同)
  • 这为我解决了错误并重新生成了令牌!简单的... (3认同)

Ven*_*ala 12

如果查看错误消息:“Verify the Service Principal used is valid and not expired”

虽然我希望获得更多信息,但纯粹基于上述情况,可能的情况是用于服务连接的密钥已过期。

  • 访问您的 Azure DevOps 组织。并打开相关项目并单击屏幕左下方的“项目设置”。

  • 单击 Azure DevOps 中的服务连接上的编辑,然后单击链接 >>“要使用现有服务主体进行更新,请使用服务连接对话框的完整版本”。

  • 复制“服务主体客户端 ID”

  • 现在在 Azure 门户中,单击 Azure Active Directory,然后单击“应用程序注册”以使用“客户端 ID”搜索您的应用程序

  • 转到“证书和机密”并检查您的客户端证书是否已过期。

  • 如果证书已过期,请生成一个新证书并复制密钥。

  • 返回 Azure DevOps“服务连接”,单击 Azure DevOps 中的服务连接编辑,然后单击链接>>“要使用现有服务主体进行更新,请使用完整版本的服务连接对话框”。

  • 使用复制的值更新服务主体密钥,验证连接并单击确定。

  • 这应该可以解决您的问题

在此处输入图片说明

  • 这不起作用,没有“使用复制的值更新服务主体密钥”的选项 (4认同)

Jam*_*s D 8

尽管解决问题的途径并不完全相同(因为 devops 可能再次发生了很大变化),但 Venura 的答案是我问题的根本原因,并且由于这些信息,我能够解决它。

我必须采取的步骤:

  1. 在 devops 中:转到发布
  2. 点击正确的项目
  3. 编辑
  4. 单击失败的阶段
  5. 打开运行代理任务进行部署(应该是azure app service deploy)
  6. 单击管理azure 订阅
  7. 单击管理服务主体
  8. 在 azure 门户中单击过期的注册
  9. 单击已过期的红色错误
  10. 单击 + 新客户端密码
  11. 复制那个新密钥
  12. 回到 DevOps
  13. 单击服务连接屏幕上的编辑(我们在第 7 步离开的地方)-(此处标题的下标是Azure Resource Manager using service principal (manual)
  14. 将复制的密钥粘贴到“服务主体密钥”字段中
  15. 点击“验证并保存”

这解决了问题,为了确认它已经解决,我刚刚触发了一个新版本,终于通过了。

  • 当我在服务连接屏幕上单击“编辑”时,我在任何地方都看不到名为“服务原则密钥”的字段。我看到:订阅、资源组和用于验证的按钮。下面是服务连接名称和可选描述。 (3认同)

Gre*_*res 5

我遵循了 JamesD 的回答,但是当我到达第 13 步时,我无处可放生成的服务原则密钥。所以我回到第一个地方并以不同的方式接近它。我没有尝试重用已过期的现有服务连接,而是创建了一个新的服务连接,然后更改了我的发布管道以使用该新服务连接,并且一切正常。

这是我的步骤:

  1. 点击左下角的项目设置
  2. 在“管道”部分下的左侧导航中,单击“服务连接”
  3. 点击右上角的“新建服务连接”按钮
  4. 选择“Azure 资源管理器”,然后选择“下一步”
  5. 选择“服务原则(自动)”(这是推荐选项)
  6. 从下拉列表中选择订阅。
  7. 从下拉列表中选择资源组
  8. 给它起个好名字并点击保存
  9. 然后使用您的 azure 门户凭据进行身份验证
  10. 现在您已经创建了一个服务连接,让我们更改管道以使用它
  11. 转到您的发布管道并对其进行编辑
  12. 单击要编辑的舞台(瞄准 # 个任务链接)
  13. 单击部署 Azure 应用服务
  14. 在 azure 订阅下拉菜单下,选择您在上面创建的新订阅条目
  15. 然后您将在该下拉列表中选择应用服务名称
  16. 点击保存,你很高兴去

现在重复管道的任何其他阶段或任何其他失败的发布管道


NKD*_*NKD 5

通过阅读其他人在此线程上的评论/帖子,Azure UI 可能已更改,因此我在此处为后来者发布步骤。我按照 ecraig12345 的建议做了,效果很好!

  1. 转到发生错误的部署管道,然后单击“编辑”
  2. 转到“在代理上运行”任务 > 部署 Azure 应用服务
  3. 单击 Azure 订阅标签旁边的管理超链接(请参见下面的屏幕截图)
  4. 点击编辑
  5. 点击保存

步骤 1 - 3 在此处输入图片说明

第四步 在此处输入图片说明

第 5 步

在此处输入图片说明