【问题标题】:Azure web app deployment does not follow ASPNETCORE_ENVIRONMENT configuration in selecting appsettings.jsonAzure Web 应用部署在选择 appsettings.json 时不遵循 ASPNETCORE_ENVIRONMENT 配置
【发布时间】:2021-11-18 07:52:53
【问题描述】:

我们有 appsettings.Production.json 来为 appsettings.json 定义一些设置覆盖。这在本地测试和设置启动设置以定义 ASPNETCORE_ENVIRONMENT 时似乎有效。

使用 Azure DevOps 管道和 debloymen 作业部署后,由于明确使用默认 appsettings.json,Web 应用程序无法运行。即使将ASPNETCORE_ENVIRONMENT 设置为应用服务配置也没有任何效果,并且该值无论如何都应默认为生产。

在已部署的 Web 应用上,Kudu 显示 ASPNETCORE_ENVIRONMENT 的所有定义,按照应用设置和环境变量的预期设置为生产。

部署作业定义如下:

  - deployment: deployWebAPI
    displayName: 'Deploy WebApi'
    dependsOn: fanOut
    variables:
      environmentName: $[ stageDependencies.build.setParameters.outputs['setParametersStep.environmentName'] ]
      appServiceName: $[ stageDependencies.build.setParameters.outputs['setParametersStep.appServiceName'] ]
      resourceGroupName: $[ stageDependencies.build.setParameters.outputs['setParametersStep.resourceGroupName'] ]
    environment: $(environmentName)
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadBuildArtifacts@0
            displayName: 'Download webApp artifact'
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: $(webAppArtifactName)
              downloadPath: '$(System.ArtifactsDirectory)'
          - task: AzureWebApp@1
            inputs:
              azureSubscription: $(azureSubscription)
              appName: $(appServiceName)
              deployToSlotOrASE: true
              resourceGroupName: $(resourceGroupName)
              package: $(System.ArtifactsDirectory)/**/$(webAppArtifactName)/MyWebApi.zip 
              deploymentMethod: zipDeploy

【问题讨论】:

    标签: .net-core azure-devops azure-pipelines-yaml


    【解决方案1】:

    部署作业变量environmentName 必须是这里的重要部分。它在我们的管道定义 yml 开头定义如下:

    variables:
      environmentName: 'test-dev'
    

    这似乎生成了一个将ASPNETCORE_ENVIRONMENT 定义为环境变量的Web.Config:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
          </handlers>
          <aspNetCore processPath="dotnet" arguments=".\MyWebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
            <environmentVariables>
              <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
            </environmentVariables>
          </aspNetCore>
        </system.webServer>
      </location>
    </configuration>
    

    将该变量更改为正确的值Production 解决了该问题。

    一些调试说明:

    • 在启动时记录以下变量可能很有用,因为您甚至无法依赖 Kudu: hostingContext.HostingEnvironment.EnvironmentName
    • 奇怪的是,尽管使用 dotnet publish --configuration Release 创建本地发布包并没有设置 env 变量,但这个 web.config 已经在管道上的构建工件中就位了。
    • 从本地环境直接发布有效,因此如果有疑问,请将本地创建的发布包与通过管道部署到服务器的发布包进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多