使用Azure Devops将asp.net核心Web应用程序部署到内部IIS的正确方法

时间:2019-05-07 06:39:10

标签: azure iis asp.net-core azure-devops webdeploy

我有一个asp.net核心应用程序。我使用azure devops任务运行发布:

dotnet restore
dotnet build

最后

dotnet publish --configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)

工件可以是zip文件,也可以不是。

工件的结果是所有dll,web.config,...

好,那是构建的一部分。

现在,我要执行relase部分并部署到IIS暂存和IIS生产。

我在文档中看到,推荐使用Web部署https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2#deploy-the-app

但是:

  • dotnet发布不会创建Web部署程序包
  • 我需要将web.config中的标签更改为

  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
  </environmentVariables>

用于登台和

  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
  </environmentVariables>

用于生产 (请注意,我不能使用env变量,因为在某些环境下服务器可以相同)

那么,我该如何正确发布?

1 个答案:

答案 0 :(得分:0)

我不确定它是否正确,但是我的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。您询问是否需要两次构建。是,如果仅针对Windows,则针对不同的OS,则为否。如果仅使用一次,则仅构建一次(仅发布),如果正在使用,则甚至从webconfig中删除environmentVariables。然后在每个服务器上设置ASPNETCORE_ENVIRONMENT环境变量。因此,当您测试具有相同的内部版本时,您将实现这一目标。在启动时,您将阅读appconfig。{env} .config取决于您部署的服务器。