2015-08-29 2 views
1

Я начал использовать powershell вчера и удивлен тем, насколько легко он сравнивается с партией. Я смог решить большинство проблем с небольшим количеством поисковых запросов в google, но в этом конкретном случае я просто не получаю сообщений об ошибках.powershell nuget push сбой без ошибок

Это сценарий, о котором идет речь:

https://github.com/taori/AjaxHub/blob/master/build/executePackaging.ps1

$apiKey = [IO.File]::ReadAllText("publish.apiKey.txt") 

foreach ($package in $packages){ 
    [xml]$xml = Get-Content($package + ".nuspec") 
    $version = $xml.package.metadata.version; 

    "Setting up packacking for $package $version" 

    $packagePath = ".\packages\$package\$version"; 

    If(Test-Path $packagePath){ 
     Remove-Item -Recurse -Force $packagePath 
    } 

    md -Force $packagePath 

    $packArguments = "pack -Symbols -Version $version $package.nuspec -OutputDirectory $packagePath"; 
    "Packaging with Nuget.exe $packArguments" 
    Start-Process -FilePath ".\Nuget.exe" -WindowStyle Hidden -ArgumentList $packArguments -ErrorAction Stop 


    $pushArguments = "push $packagePath\$package.$version.symbols.nupkg $apiKey" 
    "Pushing with Nuget.exe $pushArguments" 

    Start-Process -FilePath ".\Nuget.exe" -WindowStyle Hidden -ArgumentList $pushArguments -ErrorAction Stop 
    Start-Process -FilePath "https://www.nuget.org/packages/$package" 
} 

Read-Host -Prompt "Script done. Press <enter>" 

Это только толкающая часть, которая не работает (по крайней мере, нет обновления на nuget.org) или производит какую-либо ошибка. Кто-нибудь знает, как заставить его работать или бросать ошибки, с которыми я могу работать?

+0

Что вы проверить значение '$' 'после вызова nuget.exe'? – briantist

+0

@briantist ничего печально. попытался присвоить возвращаемое значение из вызова процесса и вывести его. – Dbl

+0

Вы можете попробовать запустить '. \ Nuget.exe' как' & Nuget.exe', это может быть чисто, но с текстом ошибки, напечатанным на консоли, которую вы не видите. Вообще-то я бы не использовал 'Start-Process' для запуска приложений командной строки. –

ответ

1

Оказывается, было несколько проблем с моей попыткой толчка. Я не знаю, почему я не получил каких-либо ошибок с помощью обычного вызова, но это помогло мне показать их:

Invoke-Expression "$nugetPath $pushArguments" -ErrorVariable $pushOutput 
"pushOutput: $pushOutput"; 

Есть много способов, чтобы попытаться ошибки захвата от Cli вызова, но это один, кажется, самый простой (и, похоже, работает с асинхронными ошибками). К сожалению, предложение г-на Три не сработало. Я также пробовал версии с «2> & 1», но это только указывало на синтаксические ошибки/ничего не возвращали.

Вопросы, которые я имел, были следующие:

  • я не применял -wait по команде пакет
  • , потому что я не делал, что этот процесс пошел пакет асинхронно
  • мой нажимной попытка произошло до того, как процесс пакет был сделан -> файл не найден (я предполагаю, что я не получаю ошибки, потому что мой толчок был слишком асинхронной)
  • DNS решительность не удалось иногда

состояние сценария без ошибок:

$packages = @("AjaxHub.Core","AjaxHub.MVC5") 

$apiKey = [IO.File]::ReadAllText("publish.apiKey.txt") 

$nugetPath = ".\Nuget.exe"; 

Resolve-DnsName "www.nuget.org" -ErrorAction Stop | Out-Null 
Resolve-DnsName "www.symbolsource.org" -ErrorAction Stop | Out-Null 

foreach ($package in $packages){ 
    [xml]$xml = Get-Content($package + ".nuspec") 
    $version = $xml.package.metadata.version; 

    "Setting up packacking for $package $version" 

    $packagePath = ".\packages\$package\$version"; 

    If(Test-Path $packagePath){ 
     Remove-Item -Recurse -Force $packagePath 
    } 

    md -Force $packagePath | Out-Null 

    # todo add sources for -Symbols pack process 
    #$packArguments = "pack -Symbols -Version $version $package.nuspec -OutputDirectory $packagePath"; 
    $packArguments = "pack -Version $version $package.nuspec -OutputDirectory $packagePath"; 
    "Packaging with Nuget.exe $packArguments" 
    Start-Process -FilePath $nugetPath -WindowStyle Hidden -ArgumentList $packArguments -ErrorAction Stop -Wait 

    $pushArguments = "push $packagePath\$package.$version.nupkg -ApiKey $apiKey -Timeout 60 -Verbosity normal" 
    "Pushing with Nuget.exe $pushArguments" 
    Start-Process -FilePath $nugetPath -WindowStyle Hidden -ArgumentList $pushArguments -ErrorAction Stop -Wait 

    Start-Process -FilePath "https://www.nuget.org/packages/$package" 

    ""; 
    ""; 
} 

Read-Host -Prompt "Script done. Press <enter>" 
Смежные вопросы