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

[JENKINS-44930] Allow sh to return exit status, stdout and stderr all at once

Open
#530 66 comments 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

Like many of the commenters on -JENKINS-26133">JENKINS-26133- I'd like to be able to capture the exit status and text written to standard out at the same time.

My current use case is calling git merge --no-edit $branches and if there was an error sending a slack notification with the output. 

The current workaround is:

def status = sh(returnStatus: true, script: "git merge --no-edit $branches > merge_output.txt")

if (status != 0) {
currentBuild.result = 'FAILED'
def output = readFile('merge_output.txt').trim()
slackSend channel: SLACK_CHANNEL, message: "<${env.JOB_URL}|${env.JOB_NAME}> ran into an error merging the PR branches into the ${TARGET_BRANCH} branch:\n```\n${output}\n```\n<${env.BUILD_URL}/console|See the full output>", color: 'warning', tokenCredentialId: 'slack-token'
error 'Merge conflict'
}
sh 'rm merge_output.txt'

Which works but isn't a great developer experience... It would be great if I could request an object that contained: status, stdout, and stderr.

---
Originally reported by drewish, imported from: Allow sh to return exit status, stdout and stderr all at once


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

Raw content of original issue

Like many of the commenters on -JENKINS-26133- I'd like to be able to capture the exit status and text written to standard out at the same time.

My current use case is calling git merge --no-edit $branches and if there was an error sending a slack notification with the output. 

The current workaround is:



def status = sh(returnStatus: true, script: "git merge --no-edit $branches > merge_output.txt")

if (status != 0) {
currentBuild.result = 'FAILED'
def output = readFile('merge_output.txt').trim()
slackSend channel: SLACK_CHANNEL, message: "<${env.JOB_URL}|${env.JOB_NAME}> ran into an error merging the PR branches into the ${TARGET_BRANCH} branch:\n```\n${output}\n```\n<${env.BUILD_URL}/console|See the full output>", color: 'warning', tokenCredentialId: 'slack-token'
error 'Merge conflict'
}
sh 'rm merge_output.txt'


Which works but isn't a great developer experience... It would be great if I could request an object that contained: status, stdout, and stderr.

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.