Compiling is a different matter, everything must be exactly the same or you'll end up with differences. My box has slightly different libraries, and a very different compiler version, so the bitcoind that I build for my own use is wildly different from the official releases, for example.
They actually use a virtual machine to create a predictable build environment for the public releases. If you hang out in #bitcoin-dev around release day, you'll see that even with all the work they put into the VM, they have differences fairly often and need to resolve them.
There is an entire field of computer science research about repeatable, trusted software builds. Due to address randomization and other 'anti-vulnerability' hacks in compilers, even building the same binary on the same system can be a challenge.