I. Current SITUATION
The object of our ongoing integration is a development team of about 100 people who develop a huge system. The entire development team is divided into several development teams for collaborative development, each development team responsible for the development of 2-3 modules, the actual module is already equivalent to a small and medium-sized system. All modules of each module are compiled together through eclipse and placed directly under Web-inf/classes. Local is not able to start the entire system, it will cost a lot of resources.
Second, the problems encountered
Prior to knowing the specifics, our initial idea was to make a continuous integration of the entire product, but soon discovered that there were many problems with this idea:
1, the entire product construction time will be very long, this time, including the compilation of code, start WebLogic, complete the automated testing, at the same time the hardware requirements of the server is very high
2, because the build time is long, so if the local build passed after the submission will seriously affect the development efficiency, and local hardware conditions may not start
3, if the local do not build submissions, because of the large number of developers, the build will be very unstable, will often be in a failed state. A build failure can cause subsequent commit blocking.
4, as a 100-person development team, code submission will cause frequent server building, the server can not afford.
At the same time as customers, they have the idea that agile development is good, but not suitable for large projects and large teams.
The most important issues focus on two areas:
1, start the entire product is too heavy (not including automated testing in the case has been so)
2, how to not affect the frequent submission of developers
Third, our ideas
Our current idea is to do multiple phases of continuous integration (multi-stage CI)
can refer to here http://www.ddj.com/development-tools/212201506
In specific terms:
1, each development group within the group to do continuous integration
2, the development team integration to do the entire product continuous integration
Probably:
1, each development team a branch, the entire product one main line
2, in the group branch to build a continuous integration environment, the group's development to the branch to submit, each group can be concurrent development, not affect
3, the team completed a complete function, from the main line to update the merged code, local construction through, submit, triggering the continuous integration of the entire product
To facilitate continuous integration builds within the group, the team tries to divide the dependencies of other modules as much as possible, and unnecessary modules (where the modules include the underlying modules, such as the workflow modules) do not have to be loaded.
Also recommend lightweight Web servers such as Tomcat to complete the test environment within the team. When you need to start weblogic or have too many functional dependencies, it is recommended that you test the product as it continues to integrate.
It also retains the original habit of starting a separate test server for manual testing.