Вызывая docker через зависания Powershell - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть сценарий PowerShell, который выполняет kubetctl / o c (o c для OpenShift) через docker

$currentPath = $((Get-Location).path)
$containerId = Invoke-Expression -Command "docker run --rm -v $($currentPath):/deploy -td ebits/openshift-client"     
docker exec $containerId oc apply -f /deploy/openshift.yml

Проблема с приведенным выше фрагментом кода, если есть ошибка в файле yml ошибка не отображается на консоли правильно, так как ни выражение-вызов, ни вызов docker напрямую не отображают стандартную ошибку на консоли. Итак, чтобы зафиксировать ошибку консоли, я придумал функцию

function Get-ProcessOutput
{
    Param (
              [Parameter(Mandatory=$true)]$Command,
              $Args
          )

    $process = New-Object System.Diagnostics.Process
    $process.StartInfo.UseShellExecute = $false
    $process.StartInfo.RedirectStandardOutput = $true
    $process.StartInfo.RedirectStandardError = $true
    $process.StartInfo.FileName = $Command
    if($Args) { $process.StartInfo.Arguments = $Args }
    $process.Start() | Out-Null
    $StandardOutput = $process.StandardOutput.ReadToEnd()
    $StandardError =  $process.StandardError.ReadLine()
    $process.WaitForExit()
    if ($process.ExitCode -gt 0) {
        Write-Host "*************************************************"
        Write-Host $StandardError
        Write-Host "*************************************************"
        Fail-Step "An error occurred while executing the command $Command $Args"
    } else {
      return $StandardOutput
  }
}

Затем я использую метод Get-ProcesOutput для выполнения команд

$currentPath  = $((Get-Location).path)
$containerId = (Get-ProcessOutput -Command "docker" -Args "run --rm -v $($currentPath):/deploy -td ebits/openshift-client").Trim()
Get-ProcessOutput -Command "docker" -Args "exec $containerId oc apply -f /deploy/openshift.yml"

Одна из проблем, с которыми я сталкиваюсь метод в том, что иногда моя docker exe c команда просто зависает без выхода.
Может кто-нибудь помочь мне разобраться, что здесь может пойти не так? Или в PowerShell есть лучший подход для захвата стандартной ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...