Reputation: 53
I am currently working in a large project that just finished transitioning to ClearCase UCM, and our stream tree looks like this:
This pattern is repeated accross multiple projects with each project having just one main int stream and x main dev streams (usually x < 5)
I am aware that one stream per developer is not ideal, but this design is out of my hands, I need to make jenkins do continuous integration given this stream tree.
My teammate and myself came up with this design:
Several Notes about this design:
Jenkins will have a job that runs every 3-5 minutes that detects whenever a user dev stream has a new baseline (The users would have to create a baseline on their user dev stream which is then detected by jenkins, that's all the user does, everything else is automated).
The Jenkins Stream would be created by jenkins as a child stream of the user dev stream and it would be based on the baseline detected.
Once jenkins is done verifying the baseline and taking action according to the build result, jenkins will remove the stream/view it created to perform it's check. (Jenkins Stream is a temporary stream only active while jenkins is building).
Jenkins has a per-component queue, two baselines for the same component will NOT build in parallel, and baselines are done on a component-scope.
That sums up the proposed design, however we have been shut down for now due to the below rationale:
That's the argument against it. However we pointed out that delivering from the user dev stream (that's how it's currently done) creates a deliverybl baseline on the stream, so the amount of baselines is the same with this design vs the other design.
However, the counter argument was:
"The deliverybl baselines created by clearcase on a deliver form stream is different from the user-created baselines and they are manageable"
When asking what is different between the baselines, the response was:
"They are different, trust me"
Which brings me to the actual questions:
Thanks, I know this is a long post and I appreciate the time you take on reading and replying to my question.
Cheers, Roy Bunting
Upvotes: 2
Views: 206
Reputation: 1323753
Is this design actually unsustainable( long term dependency chains)?
Yes, as you must put in place a purge mechanism to cleanup old baselines.
And a rmbl is not always possible, especially if that baseline is part of a deliver.
Is there a problem with users creating baselines on their user dev streams and then delivering those baselines as the method of moving changes from the user dev streams to the main dev branches?
The principle is sound but the implementation (though ClearCase UCM deliver) can be very slow, depending on the size of the components.
And there can be an order issue, where other devs might want to rebase first, validate that their changes are still valid before delivering themselves (as shown here)
Are the user-created baselines and deliverybl baselines actually different?
Yes, as explained in "What is deliverbl in UCM ClearCase?".
In addition to being unlabelled, you cannot remove them easily as they have hyperlinks and special UCM attributes.
Upvotes: 1