将我的构建部署到 azure 时(我使用 Devops 管道,但我也尝试直接通过 Visual Studio 进行部署),我不断收到资源未找到 404

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 从头开始​​重新创建资源而不修改管道,只会提供一个工作解决方案

Alh*_*cle 5

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/