【问题标题】:Proper way of deploying an asp.net core web application to on premise IIS with Azure Devops使用 Azure Devops 将 asp.net 核心 Web 应用程序部署到本地 IIS 的正确方法
【发布时间】:2019-09-24 18:40:04
【问题描述】:

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

dotnet restore
dotnet build

最后

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

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

神器的结果都是dll,web.config,...

好的,这就是构建部分。

现在,我想做发布部分并部署到 IIS 登台和 IIS 生产环境。

我可以在文档中看到 web deploy 是推荐的方式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>

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

那么,我该如何正确释放呢?

【问题讨论】:

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


    【解决方案1】:

    我不确定它是否正确,但我的 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 部署到应用服务

    附言。您问是否需要构建它两次。是的,如果您只针对 Windows,则需要针对不同的操作系统,那么不。只构建一次(仅限发布),甚至从您的 webconfig 中删除 environmentVariables(如果您使用任何内容)。然后在每台服务器上设置ASPNETCORE_ENVIRONMENT 环境变量。因此,您将在测试时实现相同的构建,并且在启动时您将阅读 appconfig.{env}.config 取决于您部署的服务器。

    【讨论】:

    • 我不是发布到 azure,而是在本地发布。而且我需要在发布阶段做web.config转换
    • @Tim dotnet publish 将自动进行转换(-c Release 将使用发布转换)。另外,如果你有 zip,是什么阻止你将该文件夹的内容放入 iis 根文件夹?
    • @Tim Azure App Service Deploy - 正在使用 msdeploy,因此您甚至可以从 azure 部署到您的本地(如果它们可见),或者您可以使用 zip 和 msdeploy 并在您的本地运行命令。
    • 这意味着我必须为每个环境进行 dotnet 发布? dotnet publish -c Staging 和 dotnet publish -c Production ?
    • 问题是我在 web.config 中设置了 ASPNETCORE_ENVIRONMENT 因为我可以在同一台服务器上拥有多个环境。所以这个变量必须在发布过程中设置。另外,如果我生成多个发布,具有不同的目标,这些值将在 web.xxx.config 中,而不是在 azure devops 变量中
    猜你喜欢
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多