Deploys at Slack
Getting a peek into an engineering organization's deploy process is always an interesting exercise. With Slack, it's no different. The process today is straightforward.
- Create a release branch to tag the Git commit and allow developers to push hotfixes (if required).
- Deploy to a staging setup which is a production environment that doesn't accept any public traffic.
- Phased roll-outs to canary servers. This is tightly coupled with monitoring to see any spikes in errors.
Some of the core principles for such a process are:
- Fast deploys. All the deployments are pull-based instead of push-based. The build server updates a key in Consul which in-turn pings N servers to pull the latest code.
- Atomic deploys. During deployment, a "cold" directory is created that pulls in new code. The server is then drained of any traffic and a symlink switches between the "hot" and "cold" directories.
- Phased roll-outs lend a lot of confidence towards reliability as it allows teams to catch errors early with lesser impact.
Full post here, 6 mins read