Often times you see a lot of companies focus on this as an after thought. The fundamental principle with CI/CD would be to help any organziation to innovate faster and deliver functionalities faster to your customers. Delivering something faster to your customers should be a great incentive for any organization to do CI/CD.
CI and CD areas have matured a lot over the last few years. For someone who relies on cloud providers there are a lot of services available which will make your journey for implmentaion very easy.
The organization maturity level is decided by where they stand with the 3 key concepts below:
Breaking a build should be a sin for any developer :-).
Getting your developers to understand this should be engrained in your tech culture. When there are distributed teams of developers working across the globe its very important to make sure that you have a stable codebase which runs all the time. Test Driven Development(TDD) is a debatable topic. However, having no automated tests is asking for disaster. There are many types of automated tests, talking about them is a topic for another day. Having your microservices repositories plugged into a CI server and run tests and make sure that it maintains a stable branch is fundamental ask of any CI.
Many in the industry believe that getting code into production in an automated way constitues continous deployment. However, due to many regulatory needs for checks and balances usually CD is done till the staging environment and then usually a push button deployment to production.
I strongly belive that continous deployment is a great way to streamline your development lifecycle whether it being to staging environement or production environment.
There is a strong need to having checks and balances at each stage to make sure that whatever the developers are commiting and pushing down in the pipeline is effective, defect free and most importantly of all doesn’t break any existing features. CD^ ensures that with multiple levels of unit test, integration test, performance test and acceptance tests this whole process is streamlined and in the end can be done without fear of not breaking anything that currently exsists and also to make sure that the new features are delivered according to your acceptance tests.
The area where I think of CD^ differently is that Continuous Delivery should also make sure that there is value to an end user in what we are delivering. It can be a bug fix, new feature or performance improvement.
There are many tools available that can be levereaged to enable the CI,CD & CD^ effectively. Some of them that I feel worth while to review are below:
- Github and Bitbucket to some extent mercurial is quite popular for version control management.
- AWS CodePipeline — CodePipeline builds, tests, and deploys your code every time there is a code change based on the release process models you define.
- AWS CodeDeploy — AWS CodePipeline is a continuous delivery service for fast and reliable application updates. CodePipeline builds, tests, and deploys your code every time there is a code change, based on the release process models you define.
- Heroku Code Pipeline and Review apps are a great feature if you haven’t tried it.
CD Tools and Options
- Cloud bees — Enterprise Jenkins and other tools
- Code Ship — Hosted Continuous Delivery Service.
- Circle CI — with the mission of building a state of the art Continuous Integration and Delivery platform for developers.
- Solano Labs — Solano Labs provides a blazingly fast solution for Continuous Integration and Deployment.
- Team City (Jet Brains) — TeamCity will make sure your software gets built, tested, and deployed, and will notify you on that the way you choose.
- Travis CI — Travis CI is a hosted continuous integration platform that enables open source and private projects on GitHub to continuously monitor build quality, shipping code directly to production after a successful build.
- Ansible — radically simple IT automation platform that makes your applications and systems easier to deploy.
- Chef — A configuration management tool that enables users to write recipes that describe how the instances in their fleet are configured.
- Puppet — A configuration management system that allows you to define the state of your IT infrastructure, then automatically enforces the correct state.
- Salt — A fast, scalable and flexible systems management software for data center automation, cloud orchestration, server provisioning, configuration management and more.
Internally @intentwise we do use both AWS and Heroku. CircleCI is a great CI/CD tool which works well with both AWS and Heroku and well integrated with Github or Bitbucket. Some of the features that we use are Code Deploy, Heroku Code Pipeline and Review apps. We are in the process of using AWS Code Pipeline which will ease out Continous delivery concept.
Any thoughts on other tools that we should give a try?
At Intentwise, we provide SAAS software that helps with AMS Reporting, AMS Analytics, and AMS recommendations based on our machine learning based recommendation engine. The Intentwise AMS analytics and reporting tool will help maximize your PPC returns while optimizing spend. If you are interested in trying out the tool that supports Amazon’s AMS automation do sign up for a Trial.