Why I think builds should be reproducible

Today I was reading DZone and cam across this article “Maven the Version Number Nazi. First of all I think the word Nazi is inappropriate but that’s besides the point made by the author.

True, the version numbering  and using ranges in dependencies in Maven is not ideal but it’s defined and works as documented. The point of his post is that he wants to changes the build numbers to accommodate to his specific needs. No point in questioning that. But the reason… He states that by some environmental change building the artifacts from the same source code produces a different result? If that is true what is the use for versioning your artifacts.
It’s not the first time that I run in to this problem. If I had a dime for each artifact (compiled and packaged set of source files) that can not be reproduced I can by a new car. Call me old school but when you put a nice ribbon on something you created you want to be able to reproduce that right?

Its important get the same artifact over and over, what if your application contains a defect that makes your company lose money. You better be able to get your point in time correct and reproduce an identical application to solve the issue. A build that is effected by environmental changes or other influences from outside are not a good thing.

My personal best on this subject:
The build server (CI) has a button to tag and build an application. This application is delivered to two different systems. One for 1st line business partners and for the rest. Some formatting and styling is involved. How this was solved. Well you take the war file, unpack it, modify a few lines in the configuration and re-pack the war and deploy to the two different servers.
The developer in question was convinced that he (or others) was able to reproduce both of the builds at any time. No documentation about those changes anywhere.