使用 Azure Devops 将 asp.net 核心 Web 应用程序部署到本地 IIS 的正确方法
Proper way of deploying an asp.net core web application to on premise IIS with Azure Devops
我有一个 asp.net 核心应用程序。我 运行 使用 azure devops 任务发布 :
dotnet restore
dotnet build
最后
dotnet publish --configuration $(BuildConfiguration) --output
$(build.artifactstagingdirectory)
工件可以是 zip 文件,也可以不是。
神器的结果全是dll,web.config,...
好的,那是构建部分。
现在,我想做发布部分并部署到 IIS 暂存和 IIS 生产。
我在文档中看到 Web 部署是推荐的方式 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2#deploy-the-app
但是:
- dotnet publish 不创建 web 部署包
- 我需要将 web.config 中的标签更改为
:
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
</environmentVariables>
用于分期和
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
用于制作
(请注意,我不能使用环境变量,因为某些环境的服务器可能相同)
那么,我怎样才能正确释放?
我不确定它是否正确,但我的 build.yml 看起来像这样
steps:
- task: DotNetCoreInstaller@0
displayName: 'Use .NET Core sdk 2.2.203'
inputs:
version: 2.2.203
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: '**/*.csproj'
vstsFeed: '--IHAVE_CUSTOM_FEED'
- script: dotnet publish -c Release -r win-x64 --self-contained true
displayName: 'dotnet build web'
workingDirectory: Source/Web
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: 'Source/Web/bin/Release/netcoreapp2.2/win-x64/publish'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/Web.zip'
replaceExistingArchive: false
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: Release'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
ArtifactName: Release
condition: succeededOrFailed()
作为工件,我将拥有我的 Web 项目的 zip,然后在发布时我使用 'Azure App Service Deploy' 将我的 zip 部署到应用程序服务
PS。您询问是否需要构建它两次。是的,如果您需要针对不同的 OS 如果您只针对 windows 那么否。只构建一次(仅发布),甚至从您的 webconfig 中删除 environmentVariables(如果您正在使用任何环境变量)。然后在每个服务器上设置 ASPNETCORE_ENVIRONMENT
环境变量。因此,当您测试具有相同的构建时,您将实现这一目标,并且在启动时,您将读取 appconfig.{env}.config 取决于您部署的服务器。
我有一个 asp.net 核心应用程序。我 运行 使用 azure devops 任务发布 :
dotnet restore
dotnet build
最后
dotnet publish --configuration $(BuildConfiguration) --output
$(build.artifactstagingdirectory)
工件可以是 zip 文件,也可以不是。
神器的结果全是dll,web.config,...
好的,那是构建部分。
现在,我想做发布部分并部署到 IIS 暂存和 IIS 生产。
我在文档中看到 Web 部署是推荐的方式 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2#deploy-the-app
但是:
- dotnet publish 不创建 web 部署包
- 我需要将 web.config 中的标签更改为
:
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
</environmentVariables>
用于分期和
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
用于制作 (请注意,我不能使用环境变量,因为某些环境的服务器可能相同)
那么,我怎样才能正确释放?
我不确定它是否正确,但我的 build.yml 看起来像这样
steps:
- task: DotNetCoreInstaller@0
displayName: 'Use .NET Core sdk 2.2.203'
inputs:
version: 2.2.203
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: '**/*.csproj'
vstsFeed: '--IHAVE_CUSTOM_FEED'
- script: dotnet publish -c Release -r win-x64 --self-contained true
displayName: 'dotnet build web'
workingDirectory: Source/Web
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: 'Source/Web/bin/Release/netcoreapp2.2/win-x64/publish'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/Web.zip'
replaceExistingArchive: false
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: Release'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
ArtifactName: Release
condition: succeededOrFailed()
作为工件,我将拥有我的 Web 项目的 zip,然后在发布时我使用 'Azure App Service Deploy' 将我的 zip 部署到应用程序服务
PS。您询问是否需要构建它两次。是的,如果您需要针对不同的 OS 如果您只针对 windows 那么否。只构建一次(仅发布),甚至从您的 webconfig 中删除 environmentVariables(如果您正在使用任何环境变量)。然后在每个服务器上设置 ASPNETCORE_ENVIRONMENT
环境变量。因此,当您测试具有相同的构建时,您将实现这一目标,并且在启动时,您将读取 appconfig.{env}.config 取决于您部署的服务器。