This is how my team has it's development environment set up:
-
Each team member has a local development environment on their own computer, where they check out the code from a shared repository.
-
Every developer work in their local development environment, once they finished writing the code they commit back.
-
The code is then checked out to a staging/testing server with the same environment setup
- If everything is OK, it will be pushed to a production server.
We're trying to integrate unit testing and BDD (behavior driven development) into this setup and we'd like to use a continuous integration server (Jenkins) too.
My question is where should we install this and where should we test the code?
- Install the full testing stack for each developer: TDD tools + BDD tools + Jenkins?
- Install the test tools only on the staging/testing server and only test code here once each developer made his/her code commit?
How is your setup?
Best Answer
Installing a CI (Jenkins in your case) on every single workstation would be an overkill. This thing is pretty heavy! Common practice is to have it only on one server and make it check for modifications (commits) in the repository every X minutes (so it automatically builds) - or you can make a post-merge hook in your VCS to trigger a build.
What do you mean by testing tools? Every dev should be able to run unit/integration tests from his environment if that is what you are asking about. In fact it is a good practice to run tests before you commit (I know that the CI is there to check it anywhere but still I prefere not to crash the builds).
The setup at all the companies I worked was pretty similar:
You can go even further and try to adopt continuous deployment. We do not have that at my current job since the procedures of deploying the application are very corporation-like.
Nice things to have: