Развертывание VSTS на облачной платформе, отличной от Azure

В настоящее время у меня есть веб-приложение ASP.NET Core с EF, которое я развертываю на GearHost (облачная платформа, отличная от Azure, которую здесь рекомендовал пользователь), используя профиль публикации веб-развертывания непосредственно из Visual Studio. Я хочу настроить CI/CD через VSTS, чтобы возможность публикации не ограничивалась одной машиной.

На данный момент я настроил этап сборки, так как шаблон .NET Core — это все, что действительно нужно. Это часть развертывания, которая меня застряла — все шаблоны (и даже статьи), которые я могу найти, относящиеся конкретно к .NET Core, сосредоточены на Azure или развертывании IIS, ни одно из которых здесь не применимо, и действительно Azure использует развертывание задачи, созданные специально для него.

Если это уместно, GearHost предоставляет учетные данные FTP, которые потенциально могут быть использованы для ручной копии. В качестве альтернативы, могу ли я каким-либо образом использовать профиль публикации VS2017 для создания определения выпуска, включая преобразования appsettings.json и миграции EF?


person Telvee32    schedule 05.08.2017    source источник
comment
Кажется, в процессе сборки VSTS есть задача загрузки FTP. Вы пробовали это?   -  person Métoule    schedule 05.08.2017
comment
Это вполне может быть то, что мне нужно, я только что посмотрел на это. Хотя на первый взгляд кажется, что это просто берет весь артефакт сборки и сбрасывает его на сервер, я не вижу способа включить замену appsettings.json (для строки подключения к БД) или миграцию EF, или действительно какой удаленный каталог должен быть использован.   -  person Telvee32    schedule 05.08.2017


Ответы (1)


Существует множество способов развернуть приложение на сервере GearHost, например, FTP, публикация профиля.

Таким образом, вы можете загрузить опубликованные файлы (например, создать профиль публикации с методом публикации файловой системы) на сервер GearHost, используя Задача FTP-загрузки.

Вы также можете загрузить профиль публикации с помощью Web Deploy. метод и импортировать в VS, а затем развернуть приложение с помощью этого профиля публикации. (Аргументы MSBuild: /p:DeployOnBuild=true /p:PublishProfile=[publish profile file name])

Что касается преобразований appsettings.json, вам не нужно преобразовывать файл appsettings.json, основной проект .net может извлекать значения из appsettings.[environment].json файла на значение системной переменной среды ASPNETCORE_ENVIRONMENT. Работа с несколькими средами

Что касается миграции EF, вы можете настроить ее в профиле публикации и опубликовать/развернуть приложение с этим профилем публикации.

Обновлять:

Шаги для вызова облачного сайта GearHost:

  1. Войти
  2. Перейдите на вкладку API > Создать новый ключ API.
  3. Использование Invoke-RestMethod

Простой код:

$url="https://api.gearhost.com/v1/cloudsites/[could site id]/stop"
 $APIID="[step 2]"
 $result=Invoke-RestMethod -Method POST -Uri $url -Headers @{Authorization=("bearer {0}" -f $APIID)} -ContentType "application/json"
person starian chen-MSFT    schedule 07.08.2017
comment
Вы также можете выполнить миграцию EF по коду при запуске приложения с переключением через переменную среды. - person Flex; 07.08.2017
comment
Я думал о том, чтобы файлы appsettings.json были определены для сред, но я обеспокоен тем, что они в конечном итоге попадут под систему управления версиями, что, как и в общедоступном репозитории GitHub, не очень желательно из-за паролей строки подключения. Возможно, сработает что-то похожее на старый метод замены токенов? Что-то вроде это? Что касается миграции EF @Flex - будет ли это переменной среды, которую я включаю/выключаю, если необходимы миграции EF? - person Telvee32; 07.08.2017
comment
@ Telvee32 Telvee32 Старый способ замены токена должен работать для вашего сценария. Что касается миграции EF, да, просто проверьте текущую среду, например env.IsEnvironment(xxx), затем вызовите миграцию EF (context.Database.Migrate()) - person starian chen-MSFT; 07.08.2017
comment
Хорошо, использование FTP в сочетании со статьей по ссылке, кажется, работает нормально. Теперь проблема в том, что я не могу очистить удаленный каталог перед передачей файла, если приложение не остановлено, что я должен сделать вручную. Если приложение не остановлено, задача FTP просто зависнет. Если мне приходится входить в GearHost и вручную останавливать приложение (а затем запускать его снова) для каждого развертывания, то это как бы противоречит цели автоматического развертывания. Знаете ли вы, предоставляет ли GearHost какой-либо API для этого, который может быть использован VSTS? - person Telvee32; 08.08.2017
comment
@Telvee32 Существует API GearHost, который может остановить CloudSite: CloudSite Operations - person starian chen-MSFT; 08.08.2017
comment
Спасибо @starain-MSFT. В настоящее время я тестирую использование этого API с Powershell (хотя мои знания Powershell почти равны нулю). Я получаю сообщение об ошибке "Отказано в авторизации" при использовании Invoke-WebRequest с набором параметров URI и параметром Credential, установленным для объекта PSCredential. Излишне говорить, что предоставленные учетные данные верны. - person Telvee32; 08.08.2017
comment
@ Telvee32 Вместо этого, используя Invoke-RestMethod, я обновил свой ответ, вы можете его проверить. - person starian chen-MSFT; 08.08.2017
comment
Спасибо @starain-MSFT, теперь все работает. Однако последнее: поскольку GearHost требует автономного развертывания для приложений .NET Core, развертывание копирует множество сред выполнения .NET Core вместе с приложением. С тех пор, как я начал использовать VSTS, похоже, было скопировано намного больше сред выполнения - одна только задача восстановления dotnet занимает довольно много времени, тогда как ручное развертывание Visual Studio все это сделало бы менее чем за минуту. Запуск приложений также намного медленнее. Может быть, это копирование избыточных сред выполнения, которые мне не нужны, и если да, то можно ли это исправить? - person Telvee32; 08.08.2017