Msbuild 在将构建部署到azure时(我使用devops管道,但我也尝试通过visual studio直接部署),我一直在获取未找到的资源404

Msbuild 在将构建部署到azure时(我使用devops管道,但我也尝试通过visual studio直接部署),我一直在获取未找到的资源404,msbuild,azure-devops,azure-web-app-service,webdeploy,terraform-provider-azure,Msbuild,Azure Devops,Azure Web App Service,Webdeploy,Terraform Provider Azure,当我尝试将我的.net core 2.2 webapi发布到我的azure应用程序服务时(通过使用azure应用程序服务部署的azure devops或通过visual studio发布方法),我不断得到: 您正在查找的资源已被删除、名称已更改或暂时不可用 但是当我直接用VisualStudio发布它时(没有包或zip配置),它就可以工作了。(但我们不能继续这样做,因为我们需要它在azure devops管道上工作) 我尝试使用dotnet build/publish和vsbuild以不同的方式

当我尝试将我的.net core 2.2 webapi发布到我的azure应用程序服务时(通过使用azure应用程序服务部署的azure devops或通过visual studio发布方法),我不断得到: 您正在查找的资源已被删除、名称已更改或暂时不可用

但是当我直接用VisualStudio发布它时(没有包或zip配置),它就可以工作了。(但我们不能继续这样做,因为我们需要它在azure devops管道上工作)

我尝试使用dotnet build/publish和vsbuild以不同的方式构建项目。我还尝试使用不同的发布方法(zip、package、webdeploy)

我检查了生成的xml文件(deploy.cmd、deploy readme、parameters、setparametersa和sourcemanifest),以检查是否存在一些错误的命名问题,或者文件夹结构是否不正确,但所有内容都匹配正确。我的项目所在的zip文件也与所有生成的xml文件(根)位于同一位置

奇怪的是,它以前是工作的,我们正在使用terraform来生成azure资源。所以我们扔掉了我们手工制作的资源,用terraform重新制作,然后我们得到了错误。我们没有改变管道中的任何东西

管道中的yaml生成代码:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:CreatePackageOnPublish=true /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\{redactedprojectname}.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'


- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'
应用程序服务部件的Terraform脚本:

# Create App Service Plan
resource "azurerm_app_service_plan" "asp" {
  name                = "${local.aspName}"
  location            = "${azurerm_resource_group.rg.location}"
  resource_group_name = "${azurerm_resource_group.rg.name}"
  tags                = "${var.tags}"

  sku {
      tier = "${var.aspSku.tier}"
      size = "${var.aspSku.size}"
    }
}

# Create App Service
resource "azurerm_app_service" "as" {
  name                = "${local.apiName}"
  location            = "${azurerm_resource_group.rg.location}"
  resource_group_name = "${azurerm_resource_group.rg.name}"
  app_service_plan_id = "${azurerm_app_service_plan.asp.id}"
  tags                = "${var.tags}"

  https_only          = true

  site_config {
    dotnet_framework_version = "v4.0"
    always_on = true
  }

  app_settings = {
    "APPINSIGHTS_INSTRUMENTATIONKEY" = "${azurerm_application_insights.ai.instrumentation_key}"
    "ASPNETCORE_ENVIRONMENT" = "${var.environment}"
  }
}

# --- Output section --
output "appServiceName" {
  value = azurerm_app_service.as.name
}
azure devops中的Terraform步骤:

use terraform 0.12.11
Terraform init
Terraform plan
Terraform apply
Terraform output get appservice name
在此之后,我们将部署Azure应用程序服务

yaml代码应用程序服务部署:

variables:
  environment: 'prd'

steps:
- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy: $(appServiceName)'
  inputs:
    azureSubscription: '{redactedprojectname}'
    WebAppName: '$(appServiceName)'
    packageForLinux: '$(System.DefaultWorkingDirectory)/{redactedprojectname}/drop'
    AppSettings: ASPNETCORE_ENVIRONMENT "$(environment)"'
    enableCustomDeployment: true
    DeploymentType: zipDeploy
    TakeAppOfflineFlag: false


我希望在之前有了一个有效的解决方案之后,删除资源并重新部署以让terraform从头开始重新创建资源,而不修改管道,只会提供一个有效的解决方案,我们最终通过使用带文件系统的msbuild而不是包来解决构建问题 以下是针对遇到相同问题的任何人的yaml代码:


trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:Configuration=Release /p:WebPublishMethod=FileSystem  /p:SkipInvalidConfigurations=true /p:DeployDefaultTarget=WebPublish /p:DeleteExistingFiles=True  /p:publishUrl="$(build.artifactStagingDirectory)\YourProjectNameFolder" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'


- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'
您只需更改msbuildArgs属性


文件系统的msbuild参数基于

我们最终解决了生成问题,将msbuild与文件系统而不是包一起使用 以下是针对遇到相同问题的任何人的yaml代码:


trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:Configuration=Release /p:WebPublishMethod=FileSystem  /p:SkipInvalidConfigurations=true /p:DeployDefaultTarget=WebPublish /p:DeleteExistingFiles=True  /p:publishUrl="$(build.artifactStagingDirectory)\YourProjectNameFolder" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'


- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'
您只需更改msbuildArgs属性


文件系统的msbuild参数基于

Terraform是否正确创建了资源?在尝试调用web应用程序时是否显示此错误消息?或者在Azure应用程序服务部署日志中?@Jamie yes我可以在Azure上确认它们已创建(并使用visual studio works发布)@MerlinLiang MSFT当我调用我的web时会显示出来application@AlhricLacle在部署azure devops任务时,根文件夹中是否有web.config文件?根据我的经验,此错误通常是由于缺少web.config文件造成的。您的资源是否由Terraform正确创建?在您尝试调用web应用程序时是否显示此错误消息?或者在Azure应用程序服务部署日志中?@Jamie yes我可以在Azure上确认它们已创建(并使用visual studio works发布)@MerlinLiang MSFT当我调用我的web时会显示出来application@AlhricLacle在部署azure devops任务时,根文件夹中是否有web.config文件?根据我的经验,此错误通常是由于缺少web.config文件引起的。