我目前正在部署一个Web应用程序,其中有一个用于生产的appsetting和一个用于测试的appsetting。在部署过程中,我如何将appsetting.json替换为生产或测试的内容?
要部署,我使用IIS Web应用程序管理器和IIS Web应用程序部署器。
我目前所做的是,每次将某个内容推送到main时,我都会设置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 to中创建的工件进行部署。当我想部署到我的测试或生产环境时,问题就会发生。
解决方案本身在appsetting.json上有一个转换,即appsetting.Test.json和appsetting.Production.json,但位于drop文件夹中的只是发布的prod构建,而不是同时包含test和prod。
如何将两者都包含在放置文件夹下?
因此,当我通过部署管道发布它时,可以指定我想要部署测试构建还是产品构建?
4条答案
按热度按时间b0zn9rqh1#
您是否尝试过使用Azure App Service Settings task?
rxztt3cl2#
如果您不想进行变量替换,那么您可以有两个json副本,一个用于prod,一个用于test,然后使用下面描述的复制任务:https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml
你可以在你的部署yaml中添加拷贝,并根据阶段使用你需要的文件。在这个拷贝任务之后,你可以添加你的部署任务。
dxxyhpgq3#
如果该问题说明
appsetting.Test.json
未包含在您的drop
文件夹中,那么将下一节添加到您的.csproj中:r55awzrz4#
在构建解决方案时,不要将
appsettings.*.json
文件转换为一个appsettings.json
文件,而要确保两个原始文件都包含在放置文件夹中。如果您难以做到这一点,则需要在问题中包含有关csproj
文件的更多详细信息。在部署到IIS时,如果您在测试环境中,请确保将
ASPNETCORE_ENVIRONMENT
environment variable设置为test
,以便应用正确的配置。我也有一个类似的答案,专门处理使用这种方式切换环境:.NET核心3.1工作服务-发布时设置EnvironmentName