DevOps: A Continuous Journey
DevOps is a movement that focuses on communication, collaboration and integration between the software development team, the operations team and the business. These teams participate together during the entire project lifecycle.
DevOps also bridges the gap between the teams by using a common toolset and techniques between departments and disciplines. The idea is to continuously get feedback in an effort to make improvements, so continuous integration, testing, delivery, deployment and feedback are some of the techniques used.
Continuous Integration (CI) is a technique by which the development teams will check in code to a shared repository preferably multiple times a day. An automated process is triggered by the check-in to build the newly integrated code. If a problem is detected at this stage, the code will not compile or build properly and this “broken” build should not be deployed into any environment. Detecting issues with code integration early in the process is a major benefit.
Continuous Testing is the technique of automating and continuously running different types of tests like unit tests, acceptance test and load tests.
After a build is successful in the continuous integration process, it should kick off at a minimal unit test. If any of the unit tests fail, the build should be rejected and the development team should be notified. All tests should pass before moving the software into the next environment.
When software is promoted into testing, staging or production environments, acceptance and load tests are run. Although manual exploratory testing is still required in some cases, the overall testing feedback loop is drastically shortened. Instead of developers waiting days to get feedback from QA, you can get automated test feedback in minutes. This also frees the QA team to concentrate primarily on the manual tests.
Continuous Delivery or Deployment
Continuous Delivery (CD) is a practice used to automate the software delivery process. By defining and setting up delivery pipelines, you can visualize and map out what needs to happen and where it needs to happen. The pipelines are usually configured in some type of continuous delivery orchestration tool like TeamCity, Thoughtworks Go or TFS.
Continuous Deployment is very similar to Continuous Delivery; the most significant difference is that you push to production automatically versus a manual sign-off.
All of the practices mentioned above are great, but it isn’t worth anything if you can’t see the feedback and act on it.
Continuous Feedback is the combination of dashboards, reports and notifications that are continuously updated and sent out to the team(s). When a build is broken, the development team needs to know. If load tests fail or the system performance monitoring reports a problem, the operations team should be alerted. Other metrics that are tracked should also be presented to the business so that the PMO can make decisions quickly.