Fundamentally, CI is a development approach that speeds up the velocity of software development. CI enforces a discipline that merges all developers' working copies of their code to a shared repository several times a day on a technical level. The purpose of this is to verify each incremental code integration's functionality through software build and test processes when developing the code. The goal is to ensure the main software code is always in a working and potentially deployable state.
A mature CI pipeline includes automated build and automated test capabilities; though, these two capabilities were not part of the original definition. Today, CI workflows encompass the process of taking each new code commit from the main branch (that is, the mainline code, trunk, or master) and running the appropriate steps to verify that commit.
A basic CI pipeline spans the following software development activities, as shown in Figure 5.4: