CICD.md

July 30, 2018 ยท View on GitHub

Continuous Integration and Delivery

Continuous Integration is the engineering practice of frequently committing code in a shared repository, ideally several times a day, and performing and automated build on it. These changes are built with other simultaneous changes to the system, which enables early detection of integration issues between multiple developers working on a project. Build breaks due to integration failures are treated as the highest priority issue for all of the developers on a team and generally work stops until they are fixed.

Paired with a test driven development approach, continuous integration also allows us to also test the integrated build such that we can verify that not only does the code base still build correctly, but also is still functionally correct. This is also a best practice for building robust and flexible software systems.

Continuous Delivery takes the Continuous Integration concept further to also test deployments of the integrated code base on a replica of the environment it will be ultimately deployed on. This enables us to learn early about any unforeseen operational issues that arise from our changes as quickly as possible and also learn about gaps in our test coverage.

The goal of all of this is to ensure that "master is always shippable," meaning that we could, if we needed to, take a build from the master branch of our code base and ship it on production.

If these concepts are unfamiliar to you, take a few minutes and read through Continuous Integration and Continuous Delivery.

Our expectation is that CI/CD should be used in all of the engineering projects that we do with our customers and that we are be building, testing, and deploying each change we make to any software system that we are building.

Our toolling at Microsoft has made setting up integration and delivery systems like this easy. If you are unfamiliar with it, take a few moments now to read through Visual Studio Team Service CI/CD and for a practical walkthrough of how this works in practice, one example you can read through is CI/CD on Kubernetes with VSTS.

Finally, for a much deeper understanding of all of these concepts, the books Continuous Integration and Continuous Delivery provide a comprehensive background.