为什么我在从 TFS 发布到 Azure 时得到 CouldnotfetchaccesstokenforAzureStatusCode

Why am I getting CouldnotfetchacccesstokenforAzureStatusCode when releasing to Azure from TFS

我想知道在从 TFS (visualstudio.com) 部署(发布工作流)到 Azure 时,我是否是唯一一个获得此 CouldnotfetchaccesstokenforAzureStatusCode 的人。甚至 google 也没有线索。

发布工作流配置文件是在 Azure 中设置的,所以我猜订阅和服务名称没问题。毕竟它设法转移了工件。它在停止工作之前已经工作了一个星期。它由 git 推送后成功的托管构建触发。无需手动工作。

##[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

我检查了 "Publish using Web Deploy" 和 "Take App Offline" 以及控制选项 "Enabled"。 App Service 是第 2 版。有什么想法吗?

编辑:尝试了第 3 版(预览版),我得到了一个不同的(但可能是相同的)错误:

##[error]Could not fetch acccess token for Azure. Status Code: 400 (Bad Request)

我重新创建了 juunas 提到的服务连接,并且成功了。您将在 TFS 的 "Services" 下找到它。那么它背后的魔力是什么:

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

感谢 Juunas 的提示!

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

我发现使用新的 "Build Editor"(仍在预览中)会出现此问题。

TL;DR 解决方案是在解决下面描述的错误之前,不要对订阅相关参数使用 "process linked parameters" 功能。

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

  • 代理将导出进程级别的环境变量 ENDPOINT_AUTH_*,指向服务端点的错误 "id"。不清楚为什么会发生这种情况 - 我倾向于将 VSTS 的初始作业消息归咎于代理代码 here 之后。
  • 任务运行器会导出那些错误命名的变量供任务使用(在保险库中)- 相关代码部分是 here
  • 特定的 Azure 部署任务会查找具有正确 ID 的环境变量,但会得到空结果,因为它们从未被导出。
  • 身份验证将因此失败。

在构建排队期间将 "debug" 标志设置为 'true' 将在跟踪中显示上述内容。

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

我不必重新创建服务连接。我只需要更新它就可以再次发布。

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