This is my little newbie Groovy script, trying to cobble together a very beginner understanding of Jenkins Pipelines:
node {
stage("hello") {
def var = "val"
echo "${var}"
def stdout = sh( script: 'pwd', returnStdout: true ).trim()
echo "${stdout}"
def ret_status = sh( script: 'cd subdir', returnStatus: true )
echo "${ret_status}"
}
}
The output is:
Started by user unknown or anonymous
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /home/user/workspace/newbie_dont_know_what_hes_doin
[Pipeline] {
[Pipeline] stage
[Pipeline] { (hello)
[Pipeline] echo
val
[Pipeline] sh
+ pwd
[Pipeline] echo
/home/user/workspace/newbie_dont_know_what_hes_doin
[Pipeline] sh
+ cd subdir
/home/user/workspace/newbie_dont_know_what_hes_doin@tmp/durable-2fa119e0/script.sh: 1: cd: can't cd to subdir
[Pipeline] echo
2
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
The failure to cd subdir
is intentional -- to demonstrate the mechanics of capturing shell stdout and status.
Why does the failed cd subdir
report a returnStatus of 2
when cd
ing to nonexistent directories in bash
returns status-code 1
? The Groovy documentation I have as reference says sh
runs a Bourne shell script.
$ echo $SHELL
/bin/bash
$ cd subdir
-bash: cd: subdir: No such file or directory
$ echo $?
1
$