Often times you see a lot of companies focus on this as an afterthought. The fundamental principle with CI/CD would be to help any organization 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 implementation 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 it’s very important to make sure that you have a stable codebase that 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 a fundamental ask of any CI.
Many in the industry believe that getting code into production in an automated way constitutes continuous deployment. However, due to many regulatory needs for checks and balances usually, the CD is done till the staging environment and then usually a push-button deployment to production.
I strongly believe that continuous deployment is a great way to streamline your development lifecycle whether it being to a staging environment or production environment.
There is a strong need to having checks and balances at each stage to make sure that whatever the developers are committing 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 exists and also to make sure that the new features are delivered according to your acceptance tests.
The area where I think of CD is different 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 leveraged to enable the CI/CD effectively. Some of them that I feel worthwhile to review is 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.
- 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 the opensource 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 that 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 the AWS Code Pipeline which will ease out Continous delivery concept.
Any thoughts on other tools that we should give a try?
Read our post “To Cloud or NOT to Cloud” for our take on whether your business should be on cloud or not.