2017-02-09 12 views
2

Я следующий сценарий PowerShell выполняется на моем сервере сборкиБелка Powershell файл не создает файл Setup.exe

Write-Host "Current Path $env:Agent_BuildDirectory" 
Write-Host "Build Number $env:Build_BuildNumber" 
$squirrel = "$env:BUILD_SOURCESDIRECTORY\packages\squirrel.windows.*\tools\Squirrel.exe" 
$releaseDir = '.\Releases' 
$nugetPackFile = ".\MyApp\MyApp.$env:Build_BuildNumber.nupkg" 
Write-Host $squirrel 
Write-Host $nugetPackFile 

if((Test-Path $nugetPackFile) -and (Test-Path $squirrel)) { 
    $squirrelArg1 = '--releasify=' + $nugetPackFile 
    $squirrelArg2 = '--releaseDir=' + $releaseDir 
    & $squirrel $squirrelArg1 $squirrelArg2 
} 

Она работает, и это создает только в папке .\Releases в nupkg. Если я запускаю ту же команду --releasify в экземпляре Visual Studio на моем агенте сервера сборки, он создает все файлы setup.exe и Releases. Почему этот сценарий PowerShell работает не так, как выполняется команда, выполняемая в окне NuGet PowerShell в VS?

ответ

2

Я не играл с белкой, так что это может не сработать; но слишком много кода здесь, чтобы просто представить в качестве комментария ...

Попробуйте это:

Write-Host "Current Path $env:Agent_BuildDirectory" 
Write-Host "Build Number $env:Build_BuildNumber" 
$squirrel = Get-Item (Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe") | select -First 1 -Expand FullName 
$releaseDir = '.\Releases' 
$nugetPackFile = ".\MyApp\MyApp.$env:Build_BuildNumber.nupkg" 
Write-Host $squirrel 
Write-Host $nugetPackFile 

if((Test-Path $nugetPackFile) -and (Test-Path $squirrel)) { 
    $squirrelArg1 = "--releasify=`"$nugetPackFile`"" 
    $squirrelArg2 = "--releaseDir=`"$releaseDir`"" 
    & $squirrel $squirrelArg1 $squirrelArg2 
} 

Получение Squirrel.exe Path

  • (Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe") - здесь я использую Join-Path, чтобы избежать какой-либо проблемы вокруг того, заканчивается или нет значение $env:BUILD_SOURCESDIRECTORY в обратном слэше.
  • Get-Item - Я положил это перед этим путем так, чтобы он разрешил путь к допустимому пути (т. Е. Выработал любые соответствия звездочки/подстановочного знака).
  • | select -First 1 -Expand FullName Я затем добавить это, чтобы получить первый путь, который соответствует результату, и вернуть полный путь к файлу squirrel.exe

Передача параметров

Для приведенных ниже утверждений, я добавил двойные кавычки вокруг путей; иногда это необходимо для разъяснения того, к какому аргументу они относятся; особенно если на пути есть пробелы или специальные символы. Я также переключился с использования + на перенос переменной в двойные кавычки, поскольку это упрощает объединение котировок внутри строки. Я использовал обратные ссылки на кавычки в строке, чтобы избежать этих символов.

  • $squirrelArg1 = "--releasify=`"$nugetPackFile`""
  • $squirrelArg2 = "--releaseDir=`"$releaseDir`""

Надежда, что помогает, но, к сожалению, это очень много догадок мною; Прости.


Update

Получение последней версии; при условии, что звездочка на пути packages\squirrel.windows.*\tools\Squirrel.exe представляет номер версии в форме: Major. Minor. Build.

$squirrel = Get-Item (Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe") | %{ 
    if ($_ -match '.*\\squirrel\.windows\.(?<Major>\d+)\.(?<Minor>\d+)\.(?<Build>\d+)\\tools\\Squirrel\.exe') { 
     (new-object -TypeName PSObject -Property $matches) 
    } 
} | sort @{e={$_.Major};a=0}, @{e={$_.Minor};a=0}, @{e={$_.Build};a=0} | select -First 1 -ExpandProperty '0' 
+1

Извините за задержанный ответ, я догнал, а затем устал. Я сейчас пытаюсь это сделать. Один вопрос о команде «First» .... можно было бы сделать команду «Last», чтобы была выбрана папка с более высоким номером версии? – PlTaylor

+1

Эти изменения, похоже, выполнили то же самое на сервере сборки, что и мой код. Они обновления, но не решить мою проблему с белкой. – PlTaylor

+1

Hey @PlTaylor; жаль, что это не решило вашу проблему. Что касается '-Last'; абсолютно, что будет делать то, что вы хотите. т. е. '1,10 | выберите -Last 1' возвращает '10'. – JohnLBevan

0

Я нашел ответ here

Write-Host "Current Path $env:Agent_BuildDirectory" 
Write-Host "Build Number $env:Build_BuildNumber" 

$squirrel = Get-Item (Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe") | %{ 
if ($_ -match '.*\\squirrel\.windows\.(?<Major>\d+)\.(?<Minor>\d+)\.(?<Build>\d+)\\tools\\Squirrel\.exe') { 
    (new-object -TypeName PSObject -Property $matches) 
    } 
} | sort @{e={$_.Major};a=0}, @{e={$_.Minor};a=0}, @{e={$_.Build};a=0} | select -First 1 -ExpandProperty '0' 

Set-Alias Squirrel $squirrel 

$releaseDir = '.\Releases' 
$nugetPackFile = ".\MyApp\MyApp.$env:Build_BuildNumber.nupkg" 
Write-Host $squirrel 
Write-Host $nugetPackFile 

if((Test-Path $nugetPackFile) -and (Test-Path $squirrel)) { 
    Squirrel --releasify $nugetPackFile --releaseDir $releaseDir | Write-Output 
} 

Большое спасибо идет в @JohnLBevan за помощь, чтобы исправить мой код Powershell.

 Смежные вопросы

  • Нет связанных вопросов^_^