What is the best way to baseline and build selective changesets?
Sorry for the long post! Here is the executive summary for my most pressing issue(from problem #2, below):
What's the best way to build a selected set of changesets in a build workspace? The build workspace is on the target stream.
PROD
^
|
|
UAT
^ ^
/ \
/ \
rel1 rel2
This gives me two challenges:
1) To handle selective builds, we deliver the changesets we want deployed to PROD and the build process will then compare the build workspace to the PROD stream to determine what is being deployed. If everything goes perfectly, this works. If there's a hiccup and the build breaks, then the workspace henceforth matches the PROD stream so there is no longer any deviations between the build workspace and the PROD stream.
I don't like the fact that the build process is dependent on the state of the workspace. I think I'm missing a key paradigm, like possibly creating a baseline of the incoming changesets or alternatively, creating before and after snapshots and then using snapshot comparisons. I also considered creating baselines in the source streams and changing the workspace stream configuration on the fly (rather than using accept at all).
2) The second challenge is inter-related with #1 in the sense that when the build breaks, I'm left with an extremely difficult manual manipulation task. For example, for the PROD deployment, I need to be able to generate a report of all the code being delivered, yet, neither Changeset Explorer nor Changeset Summary seem to give the needed functionality. As far as I can tell, Changeset Explorer just shows you the files in the changeset. CS Summary at least provides a way to load the file but it will not load the entire path nor can you load multiple changesets at once. Locate changeset seemed promising since the changeset results appear in under a stream name that suggests you could load the changeset results into their own workspace, but actually, selecting that option just takes you to the normal repository workspace creation wizard. Is there someway to do something with a set of changesets? For example:
a. Create a workspace on a stream loaded only with selected changesets
b. Generate a report of selected changesets
c. Export selected changesets either to file (load) or as a report
d. Baseline or snapshot the changesets
I'm looking for some way to capture the essential "oneness" of a group of changesets.
Thanks for any suggestions!
- Andy
3 answers
Hi Andy,
What do the lines connecting your streams represent in your diagram? If they represent which way your change sets flow, then they should be directed. Your questions seem to indicate you deploy from your PROD stream, but then I'm confused why both rel1 and rel2 streams would flow into one PROD stream from which you'd deploy.
But in general, the stream you release/deploy from *is* the cherry picked set of change sets. If a build fails on a build workspace flowing to that stream, then open the failing build result. It will have a "Show changes" link in the Contribution Summary section on the Overview tab. Clicking that link will list the new change sets per component that have been accepted into the build workspace from PROD.
Now you need to flow a fix into that stream. In self-hosting we do this from a repository workspace (that may flow change sets through another stream). Your fix could be to deliver new change set(s), or it could be that you want to discard change set(s). This is where you're cherry picking. Discarding a change set is a bit trickier. You first need accept all incoming changes into your repository workspace (so you're in sync), discard the one(s) that you want, but instead of delivering a discarded change set, you actually replace the component in the stream with the one in your repository workspace. You can do this with the "Replace in <flow target>" action in the context menu of the Pending Changes view.
Once the new change set(s) or the component replace flows to your PROD stream, you can request a new build with your cherry picked change sets.
If your business users are cherry picking the change sets, then they need to be familiar with flowing change sets from stream to stream and dealing with conflicts and gaps as they arise (or have someone do it for them). It's unclear from your post how they will work, but they may need a repository workspace with both the UAT and PROD stream as flow targets. Then you switch between flow targets to accept from one stream and deliver to the other.
Is any of this helpful?
Scott
What do the lines connecting your streams represent in your diagram? If they represent which way your change sets flow, then they should be directed. Your questions seem to indicate you deploy from your PROD stream, but then I'm confused why both rel1 and rel2 streams would flow into one PROD stream from which you'd deploy.
But in general, the stream you release/deploy from *is* the cherry picked set of change sets. If a build fails on a build workspace flowing to that stream, then open the failing build result. It will have a "Show changes" link in the Contribution Summary section on the Overview tab. Clicking that link will list the new change sets per component that have been accepted into the build workspace from PROD.
Now you need to flow a fix into that stream. In self-hosting we do this from a repository workspace (that may flow change sets through another stream). Your fix could be to deliver new change set(s), or it could be that you want to discard change set(s). This is where you're cherry picking. Discarding a change set is a bit trickier. You first need accept all incoming changes into your repository workspace (so you're in sync), discard the one(s) that you want, but instead of delivering a discarded change set, you actually replace the component in the stream with the one in your repository workspace. You can do this with the "Replace in <flow target>" action in the context menu of the Pending Changes view.
Once the new change set(s) or the component replace flows to your PROD stream, you can request a new build with your cherry picked change sets.
If your business users are cherry picking the change sets, then they need to be familiar with flowing change sets from stream to stream and dealing with conflicts and gaps as they arise (or have someone do it for them). It's unclear from your post how they will work, but they may need a repository workspace with both the UAT and PROD stream as flow targets. Then you switch between flow targets to accept from one stream and deliver to the other.
Is any of this helpful?
Scott
Comments
Hi Andy\Scott.
Its a good discussion.
I would suggest you to create an Baseline on the UAT Stream for the changeset you wanted to include in the build.
and to promote ( replace the baseline in Production Stream) the baseline from UAT stream to Production Stream.
Note: Before replacing anything create a Snapshot on the stream you can revert back to the old content.
1) Create a baseline in UAT
2) Replace the baseline in Prod Stream
Please let me know does it help or if you need any further information.
Regards,
Arun.
Its a good discussion.
I would suggest you to create an Baseline on the UAT Stream for the changeset you wanted to include in the build.
and to promote ( replace the baseline in Production Stream) the baseline from UAT stream to Production Stream.
Note: Before replacing anything create a Snapshot on the stream you can revert back to the old content.
1) Create a baseline in UAT
2) Replace the baseline in Prod Stream
Please let me know does it help or if you need any further information.
Regards,
Arun.
Comments
Hi Andy,
Yes, you have to suspend the change set before you create a baseline if you don't want to include the change-set into the Baseline.
This should be done from the Repository Workspace ( I mean suspend option).
If your having large number of task than its huge task to do.
Grouping of Changset can be done using the Baseline.
Please let me know if you need any further information.
Regards,
Arun.
Yes, you have to suspend the change set before you create a baseline if you don't want to include the change-set into the Baseline.
This should be done from the Repository Workspace ( I mean suspend option).
If your having large number of task than its huge task to do.
Grouping of Changset can be done using the Baseline.
Please let me know if you need any further information.
Regards,
Arun.