In today’s modern software development world, continuous integration, continuous delivery, and continuous deployment have become widespread. But these concepts are often confused, and can easily be misused.
It’s a hot topic of discussion and many books have even been written about this particular subject. In this post, we explain what is continuous integration, what is continuous delivery, and what is continuous deployment, as well how they can all work together. Business stakeholders, software developers and project managers alike can all work harmoniously in one integrated environment.
Table of Contents
What is continuous integration?
Continuous integration (CI) is the practice of constantly merging development work with a Master/Trunk/Mainline branch. This approach allows you to (1) test changes and (2) confirm that those changes work with other changes. The idea is to test your code as often as possible so you can catch issues early on.
In the continuous integration process, most of the work is done by automated tests, which requires a unit test framework. If you are employing continuous integration, it is best practice to have a build server designed specifically for performing these tests. This way, your development team can continue merging requests even while tests are being performed.
What is continuous delivery?
Continuous delivery (CD) is the continual delivery of code to an environment once the developer feels the code is ready to ship – this could be UAT, staging or production. The idea behind continuous delivery is that you’re constantly delivering code to a user base, whether it be QA or directly to customers for continual review and inspection.
The basis of continuous delivery is to have small batches of work continually fed to the next step, so it can be consumed more easily and issues can be found early on. This process is typically easier for developers because issues come to light before the task has left their memory.
What is the difference between continuous delivery and continuous integration?
Although similar to continuous integration, and often used in tandem on CI/CD pipelines, continuous integration is not the same as continuous delivery. CI is focused on integrating code changes automatically and running tests to make sure there are no conflicts. CD extends CI by preparing code for deployment to staging or production environments.
For example, CI might run business logic and integration tests that go beyond simple unit tests, catching design flaws or logic bugs early. CD can then take that validated code and push it through environments like QA or UAT, making it ready for release. In other words, continuous delivery automates everything up to deployment.
What is continuous deployment?
Continuous deployment is the deployment or release of code to production as soon as it’s ready. There is no large batching in staging nor a long UAT process before production. Any testing is done prior to merging to the Mainline branch and is performed on production-like environments.
Thus, the production branch is always stable and ready to be deployed by an automated process – which means it goes a step further than continuous delivery. The automated process is key because it should be able to be performed by anyone in a matter of minutes (preferably by the press of a button).
After a deploy, logs must be inspected to determine if your key metrics are affected, positively or negatively. Some of these metrics may include revenue, user sign-up, response time or traffic and preferably these metrics are graphed for easy consumption.
The key feature of the continuous deployment process is that it requires continuous integration and continuous delivery. Without it, you’re guaranteed to get errors in the release.
How do continuous integration, delivery and deployment work together?
Once you’ve moved to a continuous deployment process, you’ll need to have several pieces of automation in place. First, you must automate your continuous integration build server and continuous delivery to staging. Then, you need the ability to automatically deploy to production.

In the ideal workflow, the entire process could be automated from start to finish:
Step 1. Developer checks in code to development branch.
Step 2. Continuous integration server picks up the change, merges it with Master/Trunk/Mainline, performs unit tests and votes on the merge to staging environment based on test results.
Step 3. If Step 2 is successful, developer deploys it to the staging environment and QA tests the environment.
Step 4. If Step 3 passed, you vote to move to production and the continuous integration server picks this up again and determines if it’s ok to merge into production.
Step 5. If Step 4 is successful, it will deploy to production environment.
This process varies slightly based on needs, requirements and approaches.
Continuous deployment relies on small changes which are constantly tested, deployed and released to production immediately upon verification. The ownership of the code from development to release must be controlled by the developer and must be free flowing. The automation of these steps allows the process to be implemented and executed without cumbersome workflows.
Key tools & best practices for continuous integration, delivery, and deployment
At Assembla, we use the continuous deployment approach and serve many customers that use this approach as well. In fact, Assembla was designed with the ability to manage tasks and code in one place to support this methodology. To help your team run more efficiently, here are some continuous integration and continuous delivery/ deployment tools we recommend using:
- Travis CI for CI/CD. Travis CI is neatly integrated into the Assembla platform. Monitor any builds and tests you run in Travis CI without leaving Assembla.
- Automated testsuites for the technologies you are using, for example Rspec and Jasmine.
- Version control systems like Git, Subversion or Perforce.
- Code reviews like Github pull requests or Assembla merge requests, etc.
- Deployment & staging setup scripts like Capistrano, Shipit, Fabric, etc.
- Integrations with collaboration tools you’re already using like Slack so you can deploy via commands directly in your channel.
Need Help?
Assembla has been around over 10 years helping software development teams launch projects. We have a lot of knowledge in the area of the agile methodology not only because we use it ourselves but we also speak to dozens of teams trying to streamline their workflows, removing inefficiencies that causes project delays.
If you would like to ask us questions specific to your use case, please contact us. We’re happy to help you tackle your challenges and improve your continuous integration, delivery and deployment workflow.




