Msbuild 在将构建部署到azure时(我使用devops管道,但我也尝试通过visual studio直接部署),我一直在获取未找到的资源404
当我尝试将我的.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生成代码: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以不同的方式
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文件引起的。