Отображение исключений `dnu publish` в результатах сборки TeamCity

Я потратил около 3 дней на настройку TeamCity для сборки и публикации проекта asp.net-5. Наконец, я сделал это, используя команду dnu publish для публикации сайта. Я использую пакетный файл, чтобы сделать это с помощью следующих команд

// stops the apppool for 'samplesite' overvise it returns exception
// The process cannot access the file '...' because it is being used by another process
call "%windir%\system32\inetsrv\appcmd" stop apppool "samplesite"

// publish the site to the --out dir
call "C:\Users\Administrator\.dnx\runtimes\dnx-coreclr-win-x86.1.0.0-beta6\bin\dnu" publish --out "F:\Sites\samplesite" --runtime dnx-clr-win-x86.1.0.0-beta6

// copies the 'prod' config.json
copy "..\..\build\configuration\samplesite\config.json" "F:\Sites\samplesite\approot\src\samplesite\config.json" /Y

// copies the 'prod' web.config
copy "..\..\build\configuration\samplesite\web.config" "F:\Sites\samplesite\wwwroot\web.config" /Y

// starts the  apppool for 'samplesite'
call "%windir%\system32\inetsrv\appcmd" start apppool "samplesite"

Вопросы

  1. Is it possible to return errors/exceptions from dnu publish command to show that publishing is failed? For example, I can get an exception while doing publishing
    • The process cannot access the file..... or
    • Длина пути не может быть длиннее 260 символов...

НО результат сборки TeamCity будет отображаться как Success, поэтому мне всегда нужно проверять, действительно ли она завершена без каких-либо исключений.

  1. Есть ли другой лучший способ/скрипт для публикации сайта asp.net-5? Может я просто что-то не так делаю.

person AntonS    schedule 01.09.2015    source источник
comment
если публикация dnu не удалась, я полагаю, что она должна возвращать неуспешный код выхода... вы видите, что это не работает?   -  person Kiran Challa    schedule 01.09.2015
comment
@Kiran Challa, я пытался поймать %ERRORLEVEL%, но безуспешно   -  person AntonS    schedule 02.09.2015
comment
Я не знаком с публикацией dnu, но TeamCity может получать сообщения от сценариев сборки, и вы можете сообщить ему, что шаг сборки завершился неудачно. Взгляните на сообщения о состоянии сборки.   -  person Nanhydrin    schedule 02.09.2015
comment
@Nangidrin, проблема здесь в том, что для отправки сообщения в TeamCity об ошибке/исключении мне нужно каким-то образом поймать ошибку от dnu publish, которую я пытаюсь достичь, но безуспешно.   -  person AntonS    schedule 02.09.2015


Ответы (1)


Это немного поздно, но у меня есть кое-что, что работает для нас. Я использую сценарий powershell для переноса вызовов командной строки. Поскольку это PS, вы можете выполнить попытку/улов, а затем в улове я использую атрибут ##teamcity, чтобы пометить сбой команды города. Также убедитесь, что вы выходите с кодом состояния, отличным от 0. Обратите внимание, что я принудительно завершаю работу с кодом состояния 1, чтобы указать на сбой. Наконец, убедитесь, что все вызовы командной строки в вашем сценарии PS начинаются с «&».

Так, например, для вызова публикации DNU (я использую переменную среды, которую я установил в командном городе, чтобы указать версию dnx).

try
{
    & dnvm use $env:dnxversion -arch x64
    & dnu publish --no-source --configuration Release --runtime dnx-clr-win-x64.$env:dnxversion 
}
catch
{
    Write-Error $_
    ##teamcity[buildStatus status='FAILURE']
    [System.Environment]::Exit(1)
}
person swannee    schedule 14.09.2015