How to mark Jenkins builds as SUCCESS only on specific error exit values (other than 0)?
Alright, I went on IRC #jenkins
and no-one new about a plugin to set a particular job status depending on a particular exit code :( I managed to do what I wanted by creating an Execute shell
step with the following content:
bash -c "/path/to/myscript.sh; if [ "\$?" == "$EXPECTED_EXIT_CODE" ]; then exit 0; else exit 1; fi"
-Running the script under bash -c
allows catching the exit code and prevents Jenkins
from stopping build execution when that exit code is different than 0 (which it normally does).
-\$?
is interpreted as $?
after the script execution and represents its exit code.
-$EXPECTED_EXIT_CODE
is one of my job parameters which defines the exit code I'm expecting.
-The if
statement simply does the following: if I get the expected exit code, exit with 0 so that the build is marked as SUCCESS
, else exit with 1 so that the build is marked as FAILURE
.
/path/to/myscript.sh || if [ "$?" == "$EXPECTED_EXIT_CODE" ]; then continue; else exit 1; fi
I would use continue instead of exit 0 in case you have other items below that you need to run through.
Can handle it via the Text-finder Plugin:
- Have your script print the exit-code it is about to exit with, like:
Failed on XXX - Exiting with RC 2
- Use the Text-finder Plugin to catch that error-message and mark the build as 'Failed' or 'Unstable',
for example, if you decide RC 2, 3 and 4 should mark the build as 'Unstable', look for text in this pattern:
Exiting with RC [2-4]
.