However, having an input means that if you cancel the input, you'll have aborted the build. So, even if the first 3 steps are successful, you'll have an aborted build.
You could try/catch the input, but that will complexify the pipeline imo.
Could you explain why you need to conditionally upload the results and not doing it each time it's successful? If you have some concerns about the "space usage", you could make sure to replace the same package each time, or configure nexus to have some cleanup tasks.