[当我尝试将.net core 2.2 webapi发布到我的azure应用程序服务时(通过使用Azure App Service部署的azure devops或通过Visual Studio发布方法发布),我不断得到:“您正在寻找的资源已被删除,名称已更改或暂时不可用。”
但是当我直接在Visual Studio中发布它时(没有打包或zip配置),它可以工作。 (但是我们不能继续这样做,因为我们需要它在azure devops管道上工作)。
我试图使用dotnet build / publish和vsbuild来不同地构建项目。我还尝试使用不同的发布方法(zip,打包,网络部署)。
我通过生成的xml文件(deploy.cmd,deploy-readme,parameters,setparametersa和sourcemanifest)来检查是否存在一些错误的命名问题,或者文件夹结构是否正确,但一切都正确匹配。我的项目所在的zip文件也与所有生成的xml文件(根)都位于同一位置。
奇怪的是,它以前曾经工作过,我们正在使用terraform生成天蓝色的资源。因此,我们丢弃了手工制作的资源,并使用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
}
天蓝色开发者中的地形步骤:
use terraform 0.12.11
Terraform init
Terraform plan
Terraform apply
Terraform output get appservice name
此后,我们将部署Azure App Service
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代码: