You can structure your modules and your tests such that you can test them independently, using unit tests and functional tests while mocking other services. This keeps each individual build, likely to be kicked off by a change in the revision control system, to a minimum. Integration tests using all the components together can be kicked off at larger intervals (twice daily, for example). These should always pass if all the individual module tests passed. If not, then your tests are incomplete.