Правильный способ развертывания основного веб-приложения asp.net на IIS в локальной среде с помощью Azure Devops - PullRequest
0 голосов
/ 07 мая 2019

У меня есть основное приложение asp.net. Я запускаю публикацию с помощью задачи azure devops:

dotnet restore
dotnet build

и, наконец,

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

Артефакт может быть zip-файлом или нет.

Результатом всего артефакта является dll, web.config, ...

Хорошо, это была часть сборки.

Теперь я хочу выполнить повторную часть и развернуть ее для подготовки IIS и производства IIS.

Я вижу в документации, что веб-развертывание является рекомендуемым способом https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2#deploy-the-app

Но:

  • dotnet publish не создает пакет для веб-развертывания
  • Мне нужно изменить тег в web.config, чтобы иметь

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

для постановки и

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

для производства (обратите внимание, что я не могу использовать переменные env, потому что сервер может быть одинаковым для некоторых сред)

Итак, как мне сделать правильный выпуск?

1 Ответ

0 голосов
/ 07 мая 2019

Я не уверен, что это правильно, но мой 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()

Таким образом, в качестве артефакта у меня будет zip моего веб-проекта, затем в выпуске я использую «Azure App Service Deploy» для развертывания моего zip в службе приложений

PS. Вы спросили, нужно ли вам построить его дважды. Да, если вам нужно ориентироваться на разные ОС, если вы нацелены только на Windows, тогда нет. Построить только один раз (только для выпуска) и даже удалить environmentVariables из веб-конфигурации, если вы ее используете. Затем установите переменную окружения ASPNETCORE_ENVIRONMENT на каждом сервере. Таким образом, вы добьетесь того, что при тестировании у вас будет такая же сборка, и при запуске вы прочитаете appconfig. {Env} .config зависит от того, какой сервер вы развернули.

...