Hi all,
We're developing a web application. We have a team of programmers and two groups of manual/functional testers. Every change is made in its own Git branch, and is merged into `master` branch automatically after 1) being reviewed by an architect and 2) passing automated unit/integration tests. Jenkins automatically deploys `master` to the testing server after each merge. The first group of testers is trying to break the product at the testing server. They report defects into our bug tracking system. Programmers are fixing them in order of importance and merge into master.
Every few weeks, when master has an acceptable amount of unsolved blocking defects, we branch it into rc-123 (rc stands for release candidate and 123 for its ordinal number). Jenkins automatically deploys the most recent rc-? branch to our staging server. The second group of testers is trying to find critical defects in the product at the staging server. They are focusing on blocking issues mostly. They report defects into the bug tracking system and programmers fix them before everything else. We merge these fixes into the rc-123 branch and into master.
When the release candidate has an acceptable amount of unsolved blocking defects we branch rc-123 into release-1.3.9 (for example) and Jenkins automatically deploys it to the production server.
What do you think about this approach?
Yegor Bugayenko