Return value of a command in shell script != 0 stops build

715 views
Skip to first unread message

natalie...@gmx.net

unread,
Aug 14, 2012, 11:49:34 AM8/14/12
to jenkins...@googlegroups.com
Hi there,

I'm using Jenkins to build a C++ project on Solaris 10.

To set up the environment I'm calling various shell scripts, of which one contains the following code:
--
for P in /usr/contrib/bin /usr/local/bin
do
       cd $P > /dev/null 2>&1
       if [ $? -eq 0 ]
       then
               // XYZ
               echo $P
       fi
done
-- 

The directory "/usr/contrib/bin" does not exist. This makes the return value in line 3 (cd $P > /dev/null 2>&1) negative and Jenkins stops the build because it appears to be "failed".

In the job configuration, section "Build shell" it already says that the build is considered failed if one of the commands returns <> 0.

This script has been used for compilation by many other projects for long time, so I don't really want to change it.

Is there any workaround or solution to this behaviour (except to create this directory)?

Regards,
Natalie

Sami Tikka

unread,
Aug 14, 2012, 12:45:36 PM8/14/12
to jenkins...@googlegroups.com
If you begin the build step with a line that starts with #!, Jenkins will assume you want to specify the interpreter instead of using /bin/sh -xe, which is the default. It is the -e switch of the shell which is responsible for aborting the script when a command exits with error.

You could place "#!/bin/sh -x" on the first line (without the quotes). But remember to watch for errors yourself, then.

-- Sami

Qazwart

unread,
Aug 14, 2012, 5:52:29 PM8/14/12
to jenkins...@googlegroups.com
Add in a test to see if the director exists before doing the copy:

for P in /usr/contrib/bin /usr/local/bin
do
[ -d $P ] || continue
cd $P > /dev/null 2>&1
if [ $? -eq 0 ]
then
// XYZ
echo $P
fi
done

This will skip the iteration and go to the top of the for loop if this directory doesn't exist.

--
David Weintraub
Da...@Weintraub.name

jenkins wilde

unread,
Aug 15, 2012, 4:53:47 AM8/15/12
to jenkins...@googlegroups.com
Or you can turn off error checking for a specific command by doing:

set +e
command
set -e

Andy.

natalie...@gmx.net

unread,
Aug 16, 2012, 3:39:25 AM8/16/12
to jenkins...@googlegroups.com
Thanks for the many helpful replies!

I decided to use set the option "set +e" before executing the script for the environment variables and to unset it afterward. It works perfectly!

Natalie

 

----- Ursprüngliche Nachricht -----

Von: jenkins wilde

Gesendet: 15.08.12 10:53 Uhr

An: jenkins...@googlegroups.com

Betreff: Re: Return value of a command in shell script != 0 stops build

Reply all
Reply to author
Forward
0 new messages