config files • Changes documented on wiki pages • Few shell scripts scattered around • Application updates directly via git push/pull • Deploys done at the completion of all features – often more than a month apart
Rebuilding from scratch would have taken days. • Code deploys would be error prone. • No tracking of changes. • No dedicated Ops, ops tasks dependent only on me.
5 machines • From monolithic application to micro services. • Configuration and setup turned into a complex and unmaintainable maze. • Tried to unsuccessfully write shell scripts to configure the system.
Managment. • Greatly reduced the failure rate of changes. • One central place for recording changes. • Added simple deployment code to ansible. • Quicker and simpler deployments. • Parts of ops work could be delegated and automated.
Lack of consistency in deployments due as there were no reusable builds • Rebuilding the system would still take upto a day • Low reliability • Frequent code integration issues
• Dev, Staging and Production infrastructure – 10 machines • Releases every week, sometimes every 2-3 days. • I shift to full time ops role • 2 developers • Need for higher reliability
and QA • 3 developers – better focus and faster releases. • High number of git merge conflicts • Dabbling with ansible for dynamic infrastructure setup • Playing around with AWS and Gcloud with a view to cutting costs
git workflows • Replacing bamboo with jenkins • Setup CI/CD pipeline and integration tests • Applying the learnings to the new project started in parallel • Time to build the infrastructure cut down to hours • Multiple daily builds in dev environment • Better tracking of releases to various environments
cut down costs • Need for further cutting down the time to build new infrastucture • Complexity to write ansible code to manage infrastructure • Lack of full gcloud support in ansible(missing l7 load balancer module)
10-30 machines at a time. Not everything used all the time. • Chance to start from scratch on new projects • Bigger team of 5 devs, parallel work on multiple projects
infrastructure greatly reduced the complexity. • Adding packer builds for ready to use custom images. • Tying in of packer + terraform + ansible and running it via jenkins. • Very close to dynamic infrastructure(we need to work on quick and safe backup and retrival of data)
in a few minutes. • Infrastructure has high level of automation • Automated releases to dev along with integration testing with abilitiy to merge branches and automatic release to testing and production once we are comfortable. • Ease of delegation and collaboration among the team
on same machines. Need to be separated out. • Infrastructure can’t be swapped out and replaced transparently. • Better handling of configuration required • Infrastructure Code isn’t reusable enough. Needs to be broken down into reusable modules.