Alh*_*cle 1 msbuild webdeploy azure-web-app-service azure-devops terraform-provider-azure
当我尝试将 .net core 2.2 webapi 发布到我的 azure 应用程序服务(通过使用 Azure 应用程序服务部署的 azure devops 或通过 Visual Studio 发布方法)时,我不断收到:“您正在查找的资源已被删除,其名称已被删除已更改,或暂时不可用。”
但是当我直接使用 Visual Studio 发布它(没有包或 zip 配置)时,它就可以工作了。(但我们不能继续这样做,因为我们需要它在 azure devops 管道上工作)。
我尝试使用 dotnet build/publish 和 vsbuild 以不同的方式构建项目。我还尝试使用不同的发布方法(zip、package、web 部署)。
我仔细检查了生成的 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'
Run Code Online (Sandbox Code Playgroud)
应用程序服务部分的 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
}
Run Code Online (Sandbox Code Playgroud)
azure devops 中的 Terraform 步骤:
use terraform 0.12.11
Terraform init
Terraform plan
Terraform apply
Terraform output get appservice name
Run Code Online (Sandbox Code Playgroud)
之后我们进行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
Run Code Online (Sandbox Code Playgroud)
我希望在之前有一个工作解决方案之后,删除资源并重新部署以让 terraform 从头开始重新创建资源而不修改管道,只会提供一个工作解决方案
We ended up solving the build issue by using msbuild with filesystem instead of package Here is the yaml code for anyone who encounters the same issue:
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'
Run Code Online (Sandbox Code Playgroud)
您需要更改的只是msbuildArgs属性。
文件系统的 msbuild 参数基于https://www.joe-stevens.com/2018/12/14/publish-to-file-system-with-msbuild/
归档时间: |
|
查看次数: |
2662 次 |
最近记录: |