-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
Jenkins 2.387.2
PowerShell plugin (powershell): 2.0
Pipeline: Nodes and Processes (workflow-durable-task-step): 1241.v1a_63e465f943
Windows Server 2019 Standard version 1809
PS version : 7.2.1
I have a weird behavior when using the command pwsh with returnStdout set to true and the powershell cmdlet Invoke-Command.
Consider the following pipeline :
pipeline { agent { label 'JenkinsAgentWithPowershell7' } options { timestamps() timeout(time: 2, unit: 'MINUTES') } parameters { string(name: 'amountLoop', defaultValue: '80', description: 'Integer loop Amount') } stages { stage("Stage Test") { steps { script { try { def resultPwsh = pwsh( returnStdout: true, returnStatus: false, script: ''' $start = Get-Date $data = $null $amountLoop = \'''' + amountLoop + '''\' [scriptblock]$scriptblock = { $int_max_value = $using:amountLoop Write-Host "In invoke [elapsed time=$((Get-Date) - $Using:start)]" $array_value = @() (1..$int_max_value) | Foreach-Object { $array_value += "guinea_pig_$($_)" } $array_value | Foreach-Object { Write-Host "[Foreach-Object] value = $($_) [elapsed time=$((Get-Date) - $Using:start)]" } foreach($value in $array_value){ Write-Host "[foreach] value = $($value) [elapsed time=$((Get-Date) - $Using:start)]" } $response = $array_value | ConvertTo-Json -Compress return $response } Write-Host "call invoke command [elapsed time=$((Get-Date) - $start)]" $splatting_invoke_command = @{ ConfigurationName = 'Powershell.7' ComputerName = "$( [System.Net.Dns]::GetHostByName($env:computerName).HostName )" ScriptBlock = $scriptblock } $data = Invoke-Command @splatting_invoke_command Write-Host "data from invoke = $($data) [elapsed time=$((Get-Date) - $start)]" return $data ''' ) echo "resultPwsh=${resultPwsh}" } catch (err) { error "Error catched : ${err.toString()}" } } } } } }
If I execute the powershell script in a powershell console it works fine.
When I launch the pipeline if the amount of loop is low (example 5) the script works fine.
09:13:37 Timeout set to expire in 2 min 0 sec [Pipeline] { [Pipeline] stage [Pipeline] { (Stage Test) [Pipeline] script [Pipeline] { [Pipeline] pwsh 09:13:38 call invoke command [elapsed time=00:00:00.0010786] 09:13:39 In invoke [elapsed time=00:00:00.7243390] 09:13:39 [Foreach-Object] value = guinea_pig_1 [elapsed time=00:00:00.7550209] 09:13:39 [Foreach-Object] value = guinea_pig_2 [elapsed time=00:00:00.7564009] 09:13:39 [Foreach-Object] value = guinea_pig_3 [elapsed time=00:00:00.7573834] 09:13:39 [Foreach-Object] value = guinea_pig_4 [elapsed time=00:00:00.7582481] 09:13:39 [Foreach-Object] value = guinea_pig_5 [elapsed time=00:00:00.7590925] 09:13:39 [foreach] value = guinea_pig_1 [elapsed time=00:00:00.7602465] 09:13:39 [foreach] value = guinea_pig_2 [elapsed time=00:00:00.7611029] 09:13:39 [foreach] value = guinea_pig_3 [elapsed time=00:00:00.7619235] 09:13:39 [foreach] value = guinea_pig_4 [elapsed time=00:00:00.7627388] 09:13:39 [foreach] value = guinea_pig_5 [elapsed time=00:00:00.7635645] 09:13:39 data from invoke = ["guinea_pig_1","guinea_pig_2","guinea_pig_3","guinea_pig_4","guinea_pig_5"] [elapsed time=00:00:00.8128529] [Pipeline] echo 09:13:39 resultRunAs=["guinea_pig_1","guinea_pig_2","guinea_pig_3","guinea_pig_4","guinea_pig_5"] 09:13:39 [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // timeout [Pipeline] } [Pipeline] // timestamps [Pipeline] } [Pipeline] // withEnv [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
But if I increase the amount of loop (example 80) the script hangs and timeout.
09:14:37 Timeout set to expire in 2 min 0 sec [Pipeline] { [Pipeline] stage [Pipeline] { (Stage Test) [Pipeline] script [Pipeline] { [Pipeline] pwsh 09:14:38 call invoke command [elapsed time=00:00:00.0009059] 09:14:39 In invoke [elapsed time=00:00:00.7209058] 09:14:39 [Foreach-Object] value = guinea_pig_1 [elapsed time=00:00:00.7636166] 09:14:39 [Foreach-Object] value = guinea_pig_2 [elapsed time=00:00:00.7654486] 09:14:39 [Foreach-Object] value = guinea_pig_3 [elapsed time=00:00:00.7668519] 09:14:39 [Foreach-Object] value = guinea_pig_4 [elapsed time=00:00:00.7681719] 09:14:39 [Foreach-Object] value = guinea_pig_5 [elapsed time=00:00:00.7694217] 09:14:39 [Foreach-Object] value = guinea_pig_6 [elapsed time=00:00:00.7706422] 09:14:39 [Foreach-Object] value = guinea_pig_7 [elapsed time=00:00:00.7718780] 09:14:39 [Foreach-Object] value = guinea_pig_8 [elapsed time=00:00:00.7731238] 09:14:39 [Foreach-Object] value = guinea_pig_9 [elapsed time=00:00:00.7743461] 09:14:39 [Foreach-Object] value = guinea_pig_10 [elapsed time=00:00:00.7755632] 09:14:39 [Foreach-Object] value = guinea_pig_11 [elapsed time=00:00:00.7767536] 09:14:39 [Foreach-Object] value = guinea_pig_12 [elapsed time=00:00:00.7778299] 09:14:39 [Foreach-Object] value = guinea_pig_13 [elapsed time=00:00:00.7789158] 09:14:39 [Foreach-Object] value = guinea_pig_14 [elapsed time=00:00:00.7800974] 09:14:39 [Foreach-Object] value = guinea_pig_15 [elapsed time=00:00:00.7812100] 09:14:39 [Foreach-Object] value = guinea_pig_16 [elapsed time=00:00:00.7823295] 09:14:39 [Foreach-Object] value = guinea_pig_17 [elapsed time=00:00:00.7835177] 09:14:39 [Foreach-Object] value = guinea_pig_18 [elapsed time=00:00:00.7845542] 09:14:39 [Foreach-Object] value = guinea_pig_19 [elapsed time=00:00:00.7856747] 09:14:39 [Foreach-Object] value = guinea_pig_20 [elapsed time=00:00:00.7867954] 09:14:39 [Foreach-Object] value = guinea_pig_21 [elapsed time=00:00:00.8130105] 09:14:39 [Foreach-Object] value = guinea_pig_22 [elapsed time=00:00:00.8145213] 09:14:39 [Foreach-Object] value = guinea_pig_23 [elapsed time=00:00:00.8157142] 09:14:39 [Foreach-Object] value = guinea_pig_24 [elapsed time=00:00:00.8167274] 09:14:39 [Foreach-Object] value = guinea_pig_25 [elapsed time=00:00:00.8177801] 09:14:39 [Foreach-Object] value = guinea_pig_26 [elapsed time=00:00:00.8187570] 09:14:39 [Foreach-Object] value = guinea_pig_27 [elapsed time=00:00:00.8196644] 09:14:39 [Foreach-Object] value = guinea_pig_28 [elapsed time=00:00:00.8206429] 09:14:39 [Foreach-Object] value = guinea_pig_29 [elapsed time=00:00:00.8216685] 09:14:39 [Foreach-Object] value = guinea_pig_30 [elapsed time=00:00:00.8226360] 09:14:39 [Foreach-Object] value = guinea_pig_31 [elapsed time=00:00:00.8236376] 09:14:39 [Foreach-Object] value = guinea_pig_32 [elapsed time=00:00:00.8246294] 09:14:39 [Foreach-Object] value = guinea_pig_33 [elapsed time=00:00:00.8255654] 09:14:39 [Foreach-Object] value = guinea_pig_34 [elapsed time=00:00:00.8264886] 09:14:39 [Foreach-Object] value = guinea_pig_35 [elapsed time=00:00:00.8275127] 09:14:39 [Foreach-Object] value = guinea_pig_36 [elapsed time=00:00:00.8288818] 09:14:39 [Foreach-Object] value = guinea_pig_37 [elapsed time=00:00:00.8299226] 09:14:39 [Foreach-Object] value = guinea_pig_38 [elapsed time=00:00:00.8310028] 09:14:39 [Foreach-Object] value = guinea_pig_39 [elapsed time=00:00:00.8321239] 09:14:39 [Foreach-Object] value = guinea_pig_40 [elapsed time=00:00:00.8331686] 09:14:39 [Foreach-Object] value = guinea_pig_41 [elapsed time=00:00:00.8341904] 09:14:39 [Foreach-Object] value = guinea_pig_42 [elapsed time=00:00:00.8352166] 09:14:39 [Foreach-Object] value = guinea_pig_43 [elapsed time=00:00:00.8362682] 09:14:39 [Foreach-Object] value = guinea_pig_44 [elapsed time=00:00:00.8372438] 09:14:39 [Foreach-Object] value = guinea_pig_45 [elapsed time=00:00:00.8434064] 09:14:39 [Foreach-Object] value = guinea_pig_46 [elapsed time=00:00:00.8444876] 09:14:39 [Foreach-Object] value = guinea_pig_47 [elapsed time=00:00:00.8455167] 09:14:39 [Foreach-Object] value = guinea_pig_48 [elapsed time=00:00:00.8464736] 09:14:39 [Foreach-Object] value = guinea_pig_49 [elapsed time=00:00:00.8474714] 09:14:39 [Foreach-Object] value = guinea_pig_50 [elapsed time=00:00:00.8484266] 09:14:39 [Foreach-Object] value = guinea_pig_51 [elapsed time=00:00:00.8493614] 09:14:39 [Foreach-Object] value = guinea_pig_52 [elapsed time=00:00:00.8502628] 09:14:39 [Foreach-Object] value = guinea_pig_53 [elapsed time=00:00:00.8512897] 09:14:39 [Foreach-Object] value = guinea_pig_54 [elapsed time=00:00:00.8522533] 09:14:39 [Foreach-Object] value = guinea_pig_55 [elapsed time=00:00:00.8531861] 09:14:39 [Foreach-Object] value = guinea_pig_56 [elapsed time=00:00:00.8542015] 09:14:39 [Foreach-Object] value = guinea_pig_57 [elapsed time=00:00:00.8550948] 09:16:37 Cancelling nested steps due to timeout 09:16:37 Sending interrupt signal to process 09:16:57 After 20s process did not stop [Pipeline] error [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // timeout [Pipeline] } [Pipeline] // timestamps [Pipeline] } [Pipeline] // withEnv [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline ERROR: Error catched : org.jenkinsci.plugins.workflow.steps.FlowInterruptedException Finished: FAILURE
If I set the pwsh parameter returnStdout to false, then the script works fine whatever the amount of loop.
the powershell plugin is only for classic freestyle plugins.
powershell for pipeline jobs is provided by workflow-durable-task-step-plugin