Often question arises why we need build server and why not push the built code tested on dev to test environment.

Automation. 

One of the keystone for having the build server is to have the software built automatically

To have the code built, packaged and released to the prod and non-prod environments we may use automation which contains mainly 2 things, a tool to build the code i.e. Jenkins, Team city or VSTS and tool to manage releases like Octopus etc.

Automation tasks may look like this-

Get code from source control (TFS/VSTS)

Build the Software (Jenkins, TC etc)

Package the files

Push the package to Release (Octopus)

Create the release

Removes the dev machine been the source of truth

Dev machine should not be the only place to prove the code been satisfactorily built. Build server helps integrate dev team work and compiled and build at central place. Sometimes devs dont know how things got working, build server helps answer that.