Ensuring broken builds fail
February 23, 2013
As a correction to Jenkins configuration for Django projects, it should be noted that the ‘one-build-step’ method previously described in that page actually fails to correctly detect failed builds, due to the fact the final step in the script exits 0.
Edit: A neat addition from @richardwhiuk via github is to use the
-xe flags to bash, which ensure that broken builds exit with a non-zero status, as well as giving more verbose output for debugging.
Consequently, a better solutions is to use the following multi-step approach:
#!/bin/bash -xe virtualenv /tmp/$BUILD_TAG source /tmp/$BUILD_TAG/bin/activate pip install --use-mirrors -q -r requirements.txt deactivate
#!/bin/bash -xe source /tmp/$BUILD_TAG/bin/activate python manage.py jenkins
Which will fail correctly when asked. You can then use the Post Build Script plugin to handle cleanup, which will run regardless of whether builds pass or fail. This can then be used to remove the virtualenv for that build:
#!/bin/bash -xe rm -rf /tmp/$BUILD_TAG
This correction has also been applied to the prior post.