使用特定环境的应用程序设置部署Web应用程序。

4

我目前正在部署一个web应用程序,其中我有一个生产环境和一个测试环境的appsetting。 在部署过程中,如何将appsetting.json替换为生产环境或测试环境的内容?

我使用IIS Web App管理和IIS Web App部署来进行部署。

目前我所做的是:每当有东西被推送到主分支时,我已经设置Azure触发一个

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  testConfiguration: 'Test'
  prodConfiguration: 'Production'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(testConfiguration)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(prodConfiguration)'

- task: DotNetCoreCLI@2
  inputs:
   command: 'publish'
   publishWebProjects: true
   zipAfterPublish: true
   arguments: '--output $(build.artifactstagingdirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

我随后使用在drop中创建的构件进行部署。

问题出现在我想要部署到我的测试或生产环境时。

解决方案本身在appsetting.json上有一个转换,即appsetting.Test.json和appsetting.Production.json,但是位于drop文件夹中的内容仅为prod构建发布,而不是test和prod两者。

我该如何将两者都包含在drop文件夹中?

这样,在通过部署流水线发布它时,我可以指定要部署测试构建或生产构建吗?


根据您的描述,我无法清楚地理解您的要求。您这样做的目的是什么? - samwu
当部署时,转换后的appsetting.json文件的内容是不同的。我想要覆盖使用特定于环境的设置,而不是在appsetting.json中设置的那个。 - I am not Fat
你的问题似乎很复杂,我建议你通过以下链接打开一个案例:https://support.microsoft.com。 - samwu
我认为你可以在Linux中使用bash脚本或在Windows中使用bat文件,在你的流水线中创建一个步骤来更改appsetting.json。 - behrooz razzaghi
4个回答

0

如果您的appsetting.Test.json文件未包含在drop目录中,那么请将下一个部分添加到您的.csproj文件中:

<ItemGroup>
   <None Include="appsettings.Test.json" CopyToPublishDirectory="Always" />
</ItemGroup>

0

不要在解决方案构建期间将appsettings.*.json文件转换为单个appsettings.json文件,而是确保两个原始文件都包含在发布文件夹中。如果您遇到困难,需要在问题中包含更多关于您的csproj文件的详细信息。

部署到IIS时,请确保设置ASPNETCORE_ENVIRONMENT环境变量test(如果您在测试环境中),以便应用正确的配置。

我还有一个类似的答案,专门处理使用此方式切换环境的问题:.NET Core 3.1 Worker Service - set EnvironmentName on publish


0

这在 Azure DevOps 中。- 我不认为这是可用的? - I am not Fat
@IamnotFat 这是针对Azure Devops的。链接中有一个YAML示例,您应该能够将AzureAppServiceSettings@1作为任务添加到您的流水线中。 - FinneVirta

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接