How to push changes from a dev environment to prod
I use a custom script to automatically pull production to backup and update servers (an update server is a sanitized clone of production with updates applied via pm-update, standing by and ready for testing).  You might get some ideas looking at that.  However, I'd say that it would be a bad idea to automatically sync either prod to dev, or dev to prod.  Only publish to production after a human has tested and validated the release you'd like to bring live.  As for automating prod to dev updates, I'd think that the devs would find that very annoying.

One thing that you could pretty easily do is automate the updates of your staging server.  Just pull the database down from production, pull the latest code up from the dev branch of your repository, and run updatedb and your test suite.  A human could then validate the results and publish the code to production if it was ready.