A single release branch into which shipped code is merged and tagged by release version.
The stable code is merged, from the master, into the release branch when preparing for a release.
The CI server builds in release mode and optimizes for performance.
What are other benefits there for the release branch?
Such a release branch is good to have since it is always clear exactly what has been shipped. This can be useful if you want to analyze a bug in production, e.g. to try out bugfixes in the right environment. In that case you can just check out the release branch.
As a side note, I can mention that I wouldn't personally use the scheme described, I would recommend GitHub flow or possibly git flow.