Как увидеть индикатор выполнения PowerShell в jenkins? - PullRequest
0 голосов
/ 18 июня 2020

Я хочу видеть индикатор выполнения, который отображается в PowerShell на моей консоли jenkins.

Прямо сейчас я использую код PowerShell:

Start-BitsTransfer -DisplayName "File Download" -Source $Source -Destination $Destination -Asynchronous

$Bits = Get-BitsTransfer | where {$_.DisplayName -eq "File copy"}

While ($Bits.JobState -eq "Transferring" -or $Bits.JobState -eq "TransientError" -or $Bits.JobState -eq "Connecting" -or $Bits.JobState -eq "Error" -and $pct -ne 100){
if ($Bits.JobState -eq "Error"){
Resume-BitsTransfer -BitsJob $Bits
}
$pct = [int](($Bits.BytesTransferred*100) / $Bits.BytesTotal)
Write-Progress -Activity "Copying file..." -CurrentOperation "$pct% complete"
}

Подводя итог этим загрузкам бит и показывает прогресс по пути. Этот фрагмент кода отлично работает при запуске из PowerShell. Но когда я запускаю то же самое в Jenkins, я не вижу индикатора выполнения.

Я пишу то же самое в общей библиотеке в groovy, который выглядит примерно так:

def commandToDownloadAsynchronously = []
        commandToDownloadAsynchronously.add("Start-BitsTransfer -DisplayName \"${displayName}\" -Source ${someVal} -Destination ${someBuild} -Asynchronous")
        commandToDownloadAsynchronously.add("\$Bits = Get-BitsTransfer | where {\$_.DisplayName -eq \"${displayName}\"}")
        commandToDownloadAsynchronously.add("While (\$Bits.JobState -eq \"Transferring\" -or \$Bits.JobState -eq \"TransientError\" -or \$Bits.JobState -eq \"Connecting\" -or \$Bits.JobState -eq \"Error\" -and \$pct -ne 100){\n" +
                "\$pct = [int]((\$Bits.BytesTransferred*100) / \$Bits.BytesTotal)\n" +
                "Write-Progress -Activity \"Completion Percentage\" -CurrentOperation \"\$pct% complete\"}")
        commandExecutors.executePowerShellCommandList(script, commandToDownloadAsynchronously)

где CommandExecutors. groovy имеет следующую функцию:

static def executePowerShellCommandList(script, commandList) {
        try {
            def finalCommandList = ""
            commandList.each{ value ->
                finalCommandList = finalCommandList.toString().trim() + value.toString().trim() + ";"
            }
            script.powershell finalCommandList.trim()
        } catch (err) {
            return false
        }
        return true
    }

Консоль конвейера со сценарием powershell не отображает прогресс в реальном времени в консоли jenkins. Есть ли способ, если я хочу увидеть прогресс, который виден в PowerShell, также на консоли jenkins?

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