# Branch Based Deployments

In my opinion, leveraging a 'Branch Based' deployment strategy is one of the best ways to manage automated builds.

However, there are other strategies, and you'll need to discover which will work the best for your team.

## Overview

The source code for each deployment target is housed in a separate branch.

For example: Code in the 'dev' branch would be deployed to the development servers; 'test' code would be deployed to the test servers; and 'prod' would be deployed to production.

## Security

If your team will be using a work flow similar to 'Integration Manager' (see Part 1 - Integration Manager Work-flow); Gitlab offers the ability to have 'Protected Branches', which will allow you to restrict who may push code into specific branches.

Helpful Links:

* Permissions for Gitlab (core): <https://gitlab.com/gitlab-org/gitlab-ee/blob/master/doc/permissions/permissions.md>
* Permissions for Gitlab CI: <http://doc.gitlab.com/ci/permissions/README.html>
