Azure Pipeline 部署到应用服务失败:“资源不存在。资源在部署之前应该存在”。但应用服务正在运行

Sim*_*wsi 5 azure azure-web-app-service azure-devops

我正在做微软教程“创建多阶段管道”,练习“提升到开发阶段”:https : //docs.microsoft.com/en-us/learn/modules/create-multi-stage-pipeline/4 -promote-dev

这涉及创建 Azure 应用服务,在我的例子中名为“tailspin-space-game-web-dev-4960.azurewebsites.net”,以及 Azure DevOps 中的多阶段管道来构建 Web 应用程序项目并将其部署到应用服务。

当我去运行管道时,部署阶段失败并在日志中显示以下消息:

错误:资源“tailspin-space-game-web-dev-4960.azurewebsites.net”不存在。资源在部署之前应该存在。

我已将 URL http://tailspin-space-game-web-dev-4960.azurewebsites.net复制并粘贴到另一个浏览器窗口中,以确认应用服务存在并正在运行(尽管它目前仅显示默认应用页面因为我无法将我的应用程序部署到它)。

我的问题是:如何在 Azure DevOps 中测试应该连接到应用服务的服务连接?或者,我如何调试问题?

我无法在网上找到有关此错误的任何信息,并且来自 Microsoft 的唯一调试信息是关于创建服务连接时的错误,而不是使用它们。我也找不到任何关于测试服务连接的信息——我发现的唯一建议是在管道中运行它们,这有点循环,因为这是发生错误的地方。

我在管道上打开了详细日志记录。这是失败的部署任务的日志(添加了空行以突出显示它试图获取连接详细信息的位置):

##[debug]system.culture=en-US
##[debug]check path : /home/vsts/work/_tasks/AzureWebApp_18bde28a-8172-45cb-b204-5cef1393dbb1/1.163.2/node_modules/azurermdeploycommon/module.json
##[debug]adding resource file: /home/vsts/work/_tasks/AzureWebApp_18bde28a-8172-45cb-b204-5cef1393dbb1/1.163.2/node_modules/azurermdeploycommon/module.json
##[debug]system.culture=en-US
##[debug]azureSubscription=5d6d337f-3ceb-4a1d-8077-79e8c462faaf
##[debug]appType=null
##[debug]deployToSlotOrASE=false
##[debug]customWebConfig=null
##[debug]appSettings=null
##[debug]startUpCommand=null
##[debug]configurationStrings=null
##[debug]resourceGroupName=null
##[debug]slotName=production
##[debug]appName=tailspin-space-game-web-dev-4960.azurewebsites.net
##[debug]customDeployFolder=null
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf auth scheme = ServicePrincipal
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data subscriptionid = 7258ca03-764d-4d8a-94e2-1f12bcd06be1
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data subscriptionname = Visual Studio Premium with MSDN
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf auth param serviceprincipalid = ***
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data environmentAuthorityUrl = https://login.windows.net/
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf auth param tenantid = ***
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf=https://management.azure.com/
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data environment = AzureCloud
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf auth scheme = ServicePrincipal
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data msiclientId = undefined
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data activeDirectoryServiceEndpointResourceId = https://management.core.windows.net/
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data AzureKeyVaultServiceEndpointResourceId = https://vault.azure.net
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data AzureKeyVaultDnsSuffix = vault.azure.net
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf auth param authenticationType = ***
##[debug]credentials spn endpoint
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf auth param serviceprincipalkey = ***
##[debug]5d6d337f-3ceb-4a1d-8077-79e8c462faaf data EnableAdfsAuthentication = false
##[debug]{"subscriptionID":"7258ca03-764d-4d8a-94e2-1f12bcd06be1","subscriptionName":"Visual Studio Premium with MSDN","servicePrincipalClientID":"***","environmentAuthorityUrl":"https://login.windows.net/","tenantID":"***","url":"https://management.azure.com/","environment":"AzureCloud","scheme":"ServicePrincipal","activeDirectoryResourceID":"https://management.azure.com/","azureKeyVaultServiceEndpointResourceId":"https://vault.azure.net","azureKeyVaultDnsSuffix":"vault.azure.net","authenticationType":"***","servicePrincipalKey":***,"isADFSEnabled":false,"applicationTokenCredentials":{"clientId":"***","domain":"***","baseUrl":"https://management.azure.com/","authorityUrl":"https://login.windows.net/","activeDirectoryResourceId":"https://management.azure.com/","isAzureStackEnvironment":false,"authType":"***","secret":***,"isADFSEnabled":false}}

Got service connection details for Azure App Service:'tailspin-space-game-web-dev-4960.azurewebsites.net'
##[debug][POST]https://login.windows.net/***/oauth2/token/
##[debug][GET]https://management.azure.com/subscriptions/7258ca03-764d-4d8a-94e2-1f12bcd06be1/resources?$filter=resourceType EQ 'Microsoft.Web%2FSites' AND name EQ 'tailspin-space-game-web-dev-4960.azurewebsites.net'&api-version=2016-07-01
##[debug]Correlation ID from ARM api call response : 37546212-3807-41bf-8985-9c811d0f9c75
##[debug]Deployment Failed with Error: Error: Resource 'tailspin-space-game-web-dev-4960.azurewebsites.net' doesn't exist. Resource should exist before deployment.
##[debug]task result: Failed
##[error]Error: Resource 'tailspin-space-game-web-dev-4960.azurewebsites.net' doesn't exist. Resource should exist before deployment.
##[debug]Processed: ##vso[task.issue type=error;]Error: Resource 'tailspin-space-game-web-dev-4960.azurewebsites.net' doesn't exist. Resource should exist before deployment.
##[debug]Processed: ##vso[task.complete result=Failed;]Error: Resource 'tailspin-space-game-web-dev-4960.azurewebsites.net' doesn't exist. Resource should exist before deployment.
##[debug]Deployment failed
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 20

将应用服务部署到 Azure 后立即触发函数应用部署时出现此错误。等待 10 分钟并手动重新运行管道后,它就工作了。

  • 我发现的最简单的解决方法是将选项“retryCountOnTaskFailure”添加到任务中。到目前为止,将重试次数设置为 10 已经足够了。https://learn.microsoft.com/en-us/azure/devops/release-notes/2021/sprint-195-update#automatic-retries-for-a-task (6认同)
  • 老实说,我讨厌这种行为...我希望在继续之前先保留部署任务,直到该应用程序可供其他任务使用...我添加了 5 分钟的等待时间,这通常就足够了,但有时却不够。 t... (2认同)

jsp*_*lla 18

如果与你尝试使用的 Azure DevOps 服务连接绑定的服务主体没有相关应用服务的足够权限,你也会收到此错误。我给了它贡献者角色,这可能超出了它的需要,但是……仅此而已。

至少现在在 Azure Pipelines 管道编辑器中,对于“部署 Azure 应用服务”步骤,您可以在“应用服务名称”下选择一个资源列表,其中填充了 Azure DevOps 服务连接具有的所有可用应用服务访问权限。如果您的应用服务不在该下拉列表中,您将收到相关错误。这暗示您可能需要转到应用程序服务并为服务主体 DevOps 提供一个角色,该角色将允许其部署应用程序服务。

  • 这对我来说是最有用的提示 - 特别是关于确认您的应用程序在部署任务中可见的部分。这是一件很难发现和排除故障的事情,但它解决了我的部署问题。 (3认同)

Sim*_*wsi 5

发现问题了。我在管道中的 AzureWebApp@1 任务中使用了错误的 appName。

我没有注意到应用服务名称与 URL 中显示的名称略有不同。

应用服务名称:tailspin-space-game-web-dev-4960

网址中的名称:tailspin-space-game-web-dev-4960.azurewebsites.net

我使用的是 appName 中 URL 中的名称。我应该使用应用服务名称。