Question
What is "continuous integration" or "continual integration"?
Answer
Continuous integration (or continual integration) is the convergence of code from two or more developers via an automated process. We arrived at this definition from summarizing and extrapolating from the following three quotes:
- "Continuous Integration is merging all code from all developers to one central branch of the repo many times a day trying to avoid conflicts in the code in the future." (This was taken from Stackify.com.)
- "Continuous Integration (CI) is a development practice from Extreme Programming that requires developers to integrate code into a mainline as often as possible, at least once a day, and each check-in is then verified by an automated build that compiles the code and runs the suite of automated tests against it, allowing teams to detect problems early." (This was taken from Medium.com.)
- "Continuous Integration (CI): automated build and execution of at least unit tests to prove integration of new code with existing code, but preferably integration tests (end-to-end)." (This was taken from StackOverflow.com.)
The CI process can happen in Azure DevOps pipelines with a single software engineer. In many contexts the deployment of the artifact (e.g., of the compiled code from the CI process), is separate. From a pragmatic perspective or loose business context, you may read/hear/see things that refer to the CI process involving code being deployed. However, we are aware that the industry tends to have adopted a view that the CD process is discretely different from the CI process. That is, the transference of the new binary file or live script to a server in development, QA or production environments is not part of the CI process; this narrow definition of CI can be relevant to build engineers, site reliability engineers and DevOps engineers.
One definition of CI is to merge a branch of code to the main branch daily. "…if you merge your branch to (not just from) mainline once a day, you're OK. If you're not doing that, you're not doing continuous integration." This was taken from page 391 of Continuous Delivery by Humble and Farley.
While we prefer the term "continual integration" (see the home page for more on this), we acknowledge a highly-voted-up answer on StackOverflow.com says this: "Continuous Integration is a strategy for how a developer can integrate code to the mainline continuously - as opposed to frequently." We think the term "continually" would be appropriate. We fail to see how code could be integrated on a "continuous" and not a "frequent" basis. But given the newness of technology and the related terms, we appreciate that there are more than one valid interpretations of continuous/continual integration.
To learn more about the difference between CI and CD, see this posting. To read more about Jenkins, click here.