I have this test override:
test:
override:
- |
if ( [ $CIRCLE_BRANCH = 'staging' ] || [ $CIRCLE_BRANCH = 'master' ] ); then
docker run -d -p 0.0.0.0:8080:8080 my-app
else
./gradlew test itest
mkdir -p $CIRCLE_TEST_REPORTS/junit/
find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \;
fi
and even when:
./gradlew test itest
FAILURE: Build failed with an exception.
The build passes as successful, now I implemented this ugly workaround:
test:
override:
- |
if ( [ $CIRCLE_BRANCH = 'staging' ] || [ $CIRCLE_BRANCH = 'master' ] ); then
docker run -d -p 0.0.0.0:8080:8080 my-app
else
./gradlew test itest
export EXIT=$?
mkdir -p $CIRCLE_TEST_REPORTS/junit/
find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \;
if [ $EXIT -ne 0 ]; then
exit 1
fi
fi
And now it fails, but I wonder if I am missing something if this is actually a bug, maybe related to:
https://circleci.com/docs/rspec-exit-codes/
Here is a very simple example:
https://circleci.com/gh/grebois/circle-5818/4
1 Like
From support:
zzak (CircleCI)
Aug 28, 23:42 PDT
Based on the output of your build, it seems you are using Bash.
In this case, this is expected behavior because you're running through a pipeline. See the official documentation on pipelines, particularly:
The exit status of a pipeline is the exit status of the last command in the pipeline, unless the pipefail option is enabled (see The Set Builtin). If pipefail is enabled, the pipeline’s return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. If the reserved word ‘!’ precedes the pipeline, the exit status is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before returning a value.
I recommend to use set -eo pipefail which handles exit status for you, so you don't have to deal with returning it yourself.
Essentially -e will immediately exit if any command exists with a non-zero status, and -o pipefail does as described above (uses the exit status of the rightmost command to exit).
Hope that helps!
1 Like
Does this mean your issue was solved? Mind sharing the fix you did here for others?
1 Like
set -o pipefail
does not work for me. If I put this in a npm script tag, I get an error on the console:
sh: 1: set: Illegal option -o pipefail
I’m using the Ubuntu 14.04 (Trusty) image…