How do you capture a task error during a build?
Asked by tclements:

If a task that is executed as part of a build gets an error, like trying to delete a directory that doesn't exist, how do you capture that error so the build will also fail? Currently, any inline script commands that execute as part of task do not cause the build to fail even when the command gets an error. I am guessing that the script is currently returning a "zero" return code as long as it executes despite whether or not it fails. If this is the case, I could use an example of how to return a "non-zero" return code from an inline script task. Is there any documentation available about handling errors in build job tasks?


Answers:
author: Daniel Santos
body: Hi [@tclements](/t5/user/viewprofilepage/user-id/2747170)

The script is returning the same error code that a bash script would return (I'm assuming you are using a Linux script). By default, a script will only return the error code of the last line run. In bash for example if you want to change this behavior you need to add the following line at the beginning of your script:

```
set -e
```

A different user was facing a similar issue in this question:

* [Solved: Bamboo does not respect exit status of docker composer](https://community.atlassian.com/t5/Bamboo-questions/Bamboo-does-not-respect-exit-status-of-docker-compose/qaq-p/1197430?utm_source=atlcomm&utm_medium=email&utm_campaign=kudos_answer&utm_content=topic)

Please let me know if that fixes the issue.

comments: author: tclements
body: Hi [@Daniel Santos](/t5/user/viewprofilepage/user-id/502125) ,

Thanks for the response. I am using a script task but using "cmd.exe" as the interpreter. I didn't realize that the script will only return the error code of the last line run so that helps. I was able to get it working by exiting the script with the built in %ERRORLEVEL% parameter.

```
echo "Exiting with return code: " %ERRORLEVEL%
exit %ERRORLEVEL%
```

It would be handy to have the script stop after any failed commands. Instead of having to check "%ERRORLEVEL%" before every command, is there a "cmd.exe" setting similar to your bash "set -e" example that would stop the script on a failed command?


author: Daniel Santos
body: Hi [@tclements](/t5/user/viewprofilepage/user-id/2747170)  

I'm not an expert on Windows scripting, but I was able to find an article that will probably help you.

* [How do I make a batch file terminate upon encountering an error?](https://stackoverflow.com/questions/734598/how-do-i-make-a-batch-file-terminate-upon-encountering-an-error)

It does say that windows don't have an option similar to **set -e**.

I hope that helps.


author: tclements
body: Hi [@Daniel Santos](/t5/user/viewprofilepage/user-id/502125)

That helps. We will check the %ERRORLEVEL% parameter after each command and exit with that parameter so that any windows script failed commands will return the appropriate exit code to stop the bamboo build and/or deploy.


author: Daniel Santos
body: Awesome! I'm glad that helped =\]


author: Jimmy Seddon
body: Hi [@tclements](/t5/user/viewprofilepage/user-id/2747170),

Just going to offer this as another suggestion (we are also a Microsoft shop) we converted a number of our scripts to PowerShell which made capturing/surfacing errors to the root of the script execution much easier.

Not sure if that is an option for you, but thought I'd suggest it as it made our lives easier.

-Jimmy


author: Daniel Santos
body: That is a great suggestion too.  
Than you very much for adding that here [@Jimmy Seddon](/t5/user/viewprofilepage/user-id/512822)! =\]


author: tclements
body: Hi [@Jimmy Seddon](/t5/user/viewprofilepage/user-id/512822) ,

Yes, we have a mixture of windows scripts and PowerShell scripts and are starting to find the benefits of using PowerShell as well.

Thank you for the suggestion!