jenkinsci / jenkinsci/workflow-durable-task-step-plugin

[JENKINS-73734] Timeout of stage does not cause build to fail when running PowerShell with bat

Open
#602 1 comment 0 reactions 0 assignees View on GitHub
component:workflow-durable-task-step-plugin imported-jira-issue priority:major resolution:unresolved
Dominant language
Java
Stars
46
Forks
110
PR merge metrics
No merged PRs in 30d

Description

Steps to reproduce

Run the following declarative pipeline multiple times:

pipeline {

agent { label 'windows' }
stages {
stage('Stage') {
options {
timeout(time: 5, unit: 'SECONDS')
}
steps {
script {
writeFile(file: 'sleep.bat', text: 'ping -n 100 localhost')
writeFile(file: 'sleep.ps1', text: 'Start-Sleep 100')

// FAILS 50 %
bat 'powershell -File sleep.ps1'

// OK
//bat 'ping -n 100 localhost'

// OK
//bat 'sleep.bat'

// OK
//powershell 'Start-Sleep 100'

// OK
//powershell './sleep.ps1'
}
}
}
}
post {
always {
echo 'always'
}
success {
echo 'success'
}
aborted {
echo 'aborted'
}
failure {
echo 'failure'
}
unsuccessful {
echo 'unsuccessful'
}
}
}


Expected behavior

The timeout is honored.

The build fails on every run.

The failed builds are displayed "gray".

In the post actions, "aborted" and "unsuccessful" is echoed.


Actual behavior

The timeout is honored.

The build fails only around 50% of the runs. On about every other run, the build is marked green although it ran into timeout. In these cases, the post actions echo "successful".

Log of correct gray build:

 

```
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Stage)
[Pipeline] timeout
Timeout set to expire in 5 sec
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] writeFile
[Pipeline] writeFile
[Pipeline] batC:\Jenkins\workspace\TimeoutDebug>powershell -File sleep.ps1 
Cancelling nested steps due to timeout
Sending interrupt signal to process
script returned exit code -1
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
always
[Pipeline] echo
aborted
[Pipeline] echo
unsuccessful
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Timeout has been exceeded
org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 11ad6797-e9a8-4ec5-80f7-5ac4925f7fd0
Finished: ABORTED
```

Log of incorrect green build:

 

```
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Stage)
[Pipeline] timeout
Timeout set to expire in 5 sec
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] writeFile
[Pipeline] writeFile
[Pipeline] batC:\Jenkins\workspace\TimeoutDebug>powershell -File sleep.ps1 
Cancelling nested steps due to timeout
Sending interrupt signal to process
Batchvorgang abbrechen (J/N)? 
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
always
[Pipeline] echo
success
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
```

Additional information

I am aware of the "powershell" step and that this is the preferred way of running PowerShell. As you can see in the example pipeline, the bug is not present when using the "powershell" step. Nevertheless I wanted to inform you about this bug, as maybe other executables are affected as well.

---
Originally reported by tracetronic, imported from: Timeout of stage does not cause build to fail when running PowerShell with bat


  • status: Open
  • priority: Major
  • component(s): workflow-durable-task-step-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 1
  • imported: 20251212-090250

Raw content of original issue

Steps to reproduce

Run the following declarative pipeline multiple times:



pipeline {

agent { label 'windows' }
stages {
stage('Stage') {
options {
timeout(time: 5, unit: 'SECONDS')
}
steps {
script {
writeFile(file: 'sleep.bat', text: 'ping -n 100 localhost')
writeFile(file: 'sleep.ps1', text: 'Start-Sleep 100')

// FAILS 50 %
bat 'powershell -File sleep.ps1'

// OK
//bat 'ping -n 100 localhost'

// OK
//bat 'sleep.bat'

// OK
//powershell 'Start-Sleep 100'

// OK
//powershell './sleep.ps1'
}
}
}
}
post {
always {
echo 'always'
}
success {
echo 'success'
}
aborted {
echo 'aborted'
}
failure {
echo 'failure'
}
unsuccessful {
echo 'unsuccessful'
}
}
}



Expected behavior

The timeout is honored.
The build fails on every run.
The failed builds are displayed "gray".
In the post actions, "aborted" and "unsuccessful" is echoed.


Actual behavior

The timeout is honored.
The build fails only around 50% of the runs. On about every other run, the build is marked green although it ran into timeout. In these cases, the post actions echo "successful".

Log of correct gray build:
 



[Pipeline] {

[Pipeline] stage
[Pipeline] { (Stage)
[Pipeline] timeout
Timeout set to expire in 5 sec
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] writeFile
[Pipeline] writeFile
[Pipeline] batC:\Jenkins\workspace\TimeoutDebug>powershell -File sleep.ps1 
Cancelling nested steps due to timeout
Sending interrupt signal to process
script returned exit code -1
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
always
[Pipeline] echo
aborted
[Pipeline] echo
unsuccessful
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Timeout has been exceeded
org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 11ad6797-e9a8-4ec5-80f7-5ac4925f7fd0
Finished: ABORTED

Log of incorrect green build:
 



[Pipeline] {

[Pipeline] stage
[Pipeline] { (Stage)
[Pipeline] timeout
Timeout set to expire in 5 sec
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] writeFile
[Pipeline] writeFile
[Pipeline] batC:\Jenkins\workspace\TimeoutDebug>powershell -File sleep.ps1 
Cancelling nested steps due to timeout
Sending interrupt signal to process
Batchvorgang abbrechen (J/N)? 
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
always
[Pipeline] echo
success
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Additional information

I am aware of the "powershell" step and that this is the preferred way of running PowerShell. As you can see in the example pipeline, the bug is not present when using the "powershell" step. Nevertheless I wanted to inform you about this bug, as maybe other executables are affected as well.

environment

```
Jenkins 2.462.1

Pipeline: Nodes and Processes Version 1371.vb_7cec8f3b_95e

Microsoft Windows [Version 10.0.19045.4780]

$PSVersionTable

Name Value

---- -----

PSVersion 5.1.19041.4780

PSEdition Desktop

PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}

BuildVersion 10.0.19041.4780

CLRVersion 4.0.30319.42000

WSManStackVersion 3.0

PSRemotingProtocolVersion 2.3

SerializationVersion 1.1.0.1
```

1 attachment

- [2024-09-06 08_14_50-.png](https://issues.jenkins.io/secure/attachment/63239/2024-09-06%2008_14_50-.png)
> ![2024-09-06 08_14_50-.png](https://issues.jenkins.io/secure/attachment/63239/2024-09-06%2008_14_50-.png)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.