How to execute a command in a Jenkins 2.0 Pipeline job and then return the stdout

前端 未结 2 1519
失恋的感觉
失恋的感觉 2021-02-12 13:39

Is there a better way to run a shell task in a Jenkins 2.0 pipeline and then return the stdout of the command. The only way I can get this to work is to pipe the o

2条回答
  •  滥情空心
    2021-02-12 13:48

    Update

    Since 6/2016 JENKINS-26133 is officially marked as Resolved. Therefore, before trying below workarounds, first try supported implementation for sh/bat which makes it possible to use returnStdout and returnStatus parameters.

    Workarounds

    Unfortunately this feature is still unsupported and missing. For more information please refer to official ticket:

    JENKINS-26133 Shell script taking/returning output/status Status: Assignee: Priority: Resolution: Open Jesse Glick Major Unresolved


    Description

    Currently sh has no meaningful return value, and throws an exception if the exit status is not zero. Would be nice to have an option to have it return the exit code (zero or not) as an integer value:

    def r = sh script: 'someCommand', returnStatus: true
    

    Current workaround:

    sh 'someCommand; echo $? > status' 
    def r = readFile('status').trim()
    

    Or to have it return its standard output (akin to shell backticks):

    def lines = sh(script: 'dumpStuff.sh', returnStdout: true).split("\r?\n")
    

    Workaround:

    sh 'dumpStuff.sh > result'
    def lines = readFile('result').split("\r?\n")
    

    Or to have it take something on standard input:

    sh script: 'loadStuff.sh', stdin: someText
    

    Workaround:

    writeFile file: 'input', text: someText >     sh 'loadStuff.sh < input'
    

    Probably requires some API changes in durable-task.

提交回复
热议问题