当从TFS发布到Azure时,为什么我得到了NotnotfetchacccesstokenforAzureStatusCode

问题描述 投票:3回答:4

我想知道在从TFS(visualstudio.com)部署(发布工作流程)到Azure时,我是否是唯一一个获得此NotnotfetchacccesstokenforAzureStatusCode的人。即使是谷歌也没有任何线索。

发布工作流配置文件是在Azure中设置的,因此我猜订阅和服务名称都可以。毕竟它设法获得转移的工件。在它停止工作之前它已经工作了一个星期。它是由git push之后的成功托管构建触发的。没有手工工作。

##[section]Finishing: Download Artifacts     
##[section]Starting: Deploy Azure App Service     
==============================================================================     
Task         : Azure App Service Deploy     
Description  : Update Azure App Service using Web Deploy / Kudu REST APIs     
Version      : 2.1.10     
Author       : Microsoft Corporation     
Help         : [More Information](https://aka.ms/azurermwebdeployreadme)     
==============================================================================     
d19c95a6-ebscrabbeldabbeld9c3eb0cfeb exists true     
##[warning]Can\'t find loc string for key: CouldnotfetchacccesstokenforAzureStatusCode     
##[error]CouldnotfetchacccesstokenforAzureStatusCode 400 Bad Request     
##[section]Finishing: Deploy Azure App Service     
##[section]Finishing: Release

我已“使用Web Deploy发布”和“使应用程序脱机”并且已选中“已启用”控制选项。 App Service是版本2.任何想法?

编辑:尝试版本3(在预览中),我有一个不同的(但可能相同)错误:

##[error]Could not fetch acccess token for Azure. Status Code: 400 (Bad Request)
azure tfs release azure-web-app-service
4个回答
10
投票

我重新创建了juunas提到的服务连接,这很有效。您可以在TFS的“服务”下找到它。那么它背后的神奇背后是什么:

  • 它将服务连接绑定到Azure AD(租户ID)
  • 它在azure AD中创建应用程序,并在发布过程中使用ClientID
  • 它将服务连接绑定到您的订阅ID
  • 它创建一个可以持续1年或2年的Principal密钥(如密码)。我的原始服务中缺少这个值。您可以创建自己的Principal键或让TFS自动创建一个。

感谢Juunas的暗示!


8
投票

我没有必要重新创建服务连接。我只需更新它,这使得版本再次发布。

  1. 在Azure DevOps中打开项目
  2. 单击概述页面中项目名称右侧的铅笔,转到项目设置
  3. 单击“管道”下的“服务连接”
  4. 选择天蓝色服务连接
  5. 单击“更新服务连接”

Azure DevOps screenshot


1
投票

通过取消链接部署步骤中的所有链接项来解决此问题。所以'Azure Subscription'和'App Service name',即使它们看起来设置正确......这让它对我有用。


0
投票

造成此错误的另一个可能原因 -

我已经看到使用新的"Build Editor"(仍在预览中)发生此问题。

TL; DR解决方案是在订阅相关参数之前不使用“过程链接参数”功能,直到解决下面描述的错误。

在这种情况下,如果使用"process linked parameters"功能并且在“进程”级别指定要使用的订阅,则会发生以下情况:

  • 代理将导出进程级别的环境变量ENDPOINT_AUTH_*,指向服务端点的错误“id”。不清楚为什么会发生这种情况 - 我倾向于责怪代理商的代码here后来自VSTS的初始工作消息。
  • 任务运行器会导出那些错误的名称变量以供使用的任务(在库中) - 相关的代码部分是here
  • 特定的azure部署任务将查找具有正确id的环境变量,但由于它们从未导出,因此将获得空结果。
  • 验证将因此失败。

在构建队列的过程中将“debug”标志设置为“true”将在跟踪中显示上述内容。

© www.soinside.com 2019 - 2024. All rights reserved.