使用 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

但是:

:

  <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 取决于您部署的服务器。