DEV Community

Discussion on: Tips and tricks for scalable CI/CD flow

Collapse
 
swehunter2000 profile image
swehunter2000

why would branches and CI be mutually exclusive? Branches might be the most important part when developing a system with multiple developers.

Collapse
 
anortef profile image
Adrián Norte

CI means Continuous (keyword here) Integration it means that every change made to the code is integrated the moment it is committed therefore branching cannot be CI at most it can be Very Often Integration but not CI.

davefarley.net/?p=247

This guy explains it way better than me.

Thread Thread
 
risingsunstudios profile image
Rising Sun Studios

Did you read all the comments in reply to that blog post? Branching does not prevent CI. Failing to integrate changes regularly prevents CI.

Thread Thread
 
anortef profile image
Adrián Norte

I think those comments are wrong and didn't got the idea.

Continuous integration is continuous not often, continuous.
That means that every change, no matter how little, is integrated immediately. Branches on the other hand only integrate when, in best case, the developer does rebase often(and is still a half integration cuz you are doing things on your bubble without active feedback) or in worst case, when the branch is merged therefore the integration is not continuous.

Thread Thread
 
neskhodovskiy profile image
Serhiy Neskhodovskiy

I think you misunderstand CI.

Unless you are the only developer on the project (and very often even then) you will have branches in your VCS.

Having branches does not prevent you from doing CI. However, not every branch is purposed for CI of course. You don't want to integrate everything without control, do you? Otherwise a small mistake may take down entire project and you'll have to rollback (and lose dollars meanwhile).

So CI is ONLY done on SOME branches. 1. A change is made on non-CI branch. 2. Change passes quality control. 3. Change is merged into a CI branch. 4. Deployment is triggered automatically on EVERY change in CI branch, that's why it's still CONTINUOUS integration (related to that controlled branch).

Thread Thread
 
anortef profile image
Adrián Norte

No, it isn´t and I explained it in my comment the why.

Branches are totally incompatible with CI is literally impossible to do CI having a branching strategy because you wouldn´t be integrating every little change in a continuous manner and your comment already says so with the "You don't want to integrate everything without control, do you?". Yes, I want to integrate everything and then run tests because that is CI.

The only way to do CI is to use trunk based development if not what you are doing is promiscuous integration that is also not bad, not everyone needs or is ready for CI.

Thread Thread
 
neskhodovskiy profile image
Serhiy Neskhodovskiy

Okay, Adrián, can you please reference any widely accepted definitions that prove your point?

Thread Thread
 
anortef profile image
Adrián Norte • Edited
Thread Thread
 
neskhodovskiy profile image
Serhiy Neskhodovskiy

Thanks