Azure App Service部署无法获取资源类型'Microsoft.Web / Sites'的资源ID

时间:2019-09-25 21:52:23

标签: deployment azure-devops azure-web-sites access-token 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

5 个答案:

答案 0 :(得分:10)

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

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

(从this forum comment中找出来。)

答案 1 :(得分:7)

尽管解决问题的方法并不完全相同(因为devops可能再次发生了很大变化),但来自Venura的答案是我问题的根本原因,并且由于此信息,我得以解决。

我必须采取的步骤:

  1. 在devops中:转到发行版
  2. 点击正确的项目
  3. 编辑
  4. 单击失败的阶段
  5. 打开要部署的运行代理程序任务(应该是azure应用程序服务部署)
  6. 点击管理天蓝色订阅
  7. 点击管理服务主体
  8. 在azure门户中,单击过期的注册
  9. 单击已过期的红色错误
  10. 点击+新的客户机密
  11. 复制该新密钥
  12. 回到devops
  13. 单击服务连接屏幕上的“编辑”(我们在第7步离开的位置)-(此处的标题下标是使用服务主体的“ Azure资源管理器”(手动)
  14. 将复制的密钥粘贴到“服务主体密钥”字段中
  15. 点击“验证并保存”

问题解决了,确认是否已解决,我刚刚触发了一个新版本,终于通过了。

答案 2 :(得分:2)

如果您看到错误消息:“验证所使用的服务主体是否有效且未过期”

尽管我希望有更多信息,但仅基于上述情况,可能的情况是用于服务连接的密钥已过期。

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

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

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

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

  • 转到“证书和秘密”,然后检查您的客户端证书是否已过期。

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

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

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

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

enter image description here

答案 3 :(得分:2)

我遵循JamesD的回答,但是当我到达步骤13时,我无处可放置生成的服务原理密钥。因此,我回到第一个方框,并以另一种方式进行处理。我没有尝试重用已经过期的现有服务连接,而是创建了一个新的服务连接,然后更改了发布管道以使用该新服务连接,并且一切正常。

这是我的步骤:

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

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

答案 4 :(得分:2)

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

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

步骤 1 - 3 enter image description here

第 4 步 enter image description here

步骤 5

enter image description here