When executing commands from a shared library, stdout is always null. How do I get an handle on it ? This only happens when calling the shared library from a pipeline. If I run it in the 'Script Console' (with modification to make it execute), I get content from stdout.
Example:
Shared library:
// CodeDeploy.groovy
class CodeDeploy {
Script script
def executeOnShell(String... command) {
script.println "About to execute: " + command
def process = new ProcessBuilder(command)
process.redirectOutput()
process.redirectErrorStream(true)
def shell = process.start()
InputStream shellIn = shell.getInputStream()
BufferedReader reader = new BufferedReader(new InputStreamReader(shellIn))
StringBuilder builder = new StringBuilder()
String line = null;
shell.waitFor()
while ((line = reader.readLine()) != null) {
builder.append(line);
builder.append("\n");
}
script.println('Output from command: ' + builder.toString())
int shellExitStatus = shell.exitValue();
script.println('Exit value: ' + shellExitStatus)
return builder.toString();
}
}
Pipeline Usage:
//Jenkinsfile
@Library('jenkins-pipeline-libraries')
import com.wizrocket.jenkins.CodeDeploy
pipeline {
agent any
options {
timestamps()
buildDiscarder(logRotator(numToKeepStr: '9999'))
disableConcurrentBuilds()
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('lost output') {
steps {
script {
CodeDeploy cd = new CodeDeploy(script: this)
cd.executeOnShell('time', 'sleep', '10')
}
}
}
}
post {
always {
deleteDir()
echo 'I will always say Hello again!'
}
}
}
Output:
[Pipeline] }
[Pipeline] // stage
[Pipeline] timestamps
[Pipeline] {
[Pipeline] timeout
14:00:49 Timeout set to expire in 1 hr 0 min
[Pipeline] {
[Pipeline] stage
[Pipeline] { (lost output)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
14:00:49 About to execute: [time, sleep, 10]
[Pipeline] echo
14:00:59 Output from command:
[Pipeline] echo
14:00:59 Exit value: 0
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] deleteDir
[Pipeline] echo
14:00:59 I will always say Hello again!
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS