Release Management/SCM with TFS Scott Colestock Presented by.

50
Release Management/SCM with TFS Scott Colestock Presented by
  • date post

    19-Dec-2015
  • Category

    Documents

  • view

    225
  • download

    2

Transcript of Release Management/SCM with TFS Scott Colestock Presented by.

Page 1: Release Management/SCM with TFS Scott Colestock Presented by.

Release Management/SCMwith TFSScott Colestock

Presented by

Page 2: Release Management/SCM with TFS Scott Colestock Presented by.

About me -

• Consulting independently in the BizTalk 2004/2006 space for about 3 years

• Blog: www.traceofthought.net• Recently focused on VSTS/TFS

(speaking/writing/production rollouts)

Page 3: Release Management/SCM with TFS Scott Colestock Presented by.

Agenda

• Branching & Merging – Mechanics within TFS– Strategies

• How does Team Build help with SCM?• Carrying through to physical environments

– TFS Deployer

Page 4: Release Management/SCM with TFS Scott Colestock Presented by.

Software Configuration Management

• The process of identifying and selecting all the elements of a software system that create the correct and cohesive set - at defined points in time– Not unlike managing bill-of-materials for a

highly complex manufactured product

• Large topic – we’re focused (primarily) on branching & merging strategies…

• Poor SCM leads to development, testing, and operational inefficiencies

Page 5: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Mechanics in TFS• TFS implements “path space branching” (vs.

“version space”)– Similar to subversion– CVS/others hide the branch…

• Branching in TFS is essentially like doing a “deep copy” of a folder on your local drive– But branch “parent” is preserved (where in the tree you

branched from)– Originating changeset is preserved– Ability to selectively merge parent changesets into the

branch

Page 6: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Mechanics in TFS

• Path space branching means you see the branch folder directly in the Source Control Explorer – easy to navigate, retrieve, and establish permissions per branch

• TFS implements an immediate branching model, rather than deferred (i.e. branch-on-change)– More meta-data created at the point of branch

operation (though just one copy of underlying files until changed in branch)

– A bit more useable – contents of branch are clear

Page 7: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Mechanics

• When creating a project, plan for future branches by placing initial check-in under a “Dev” or “Main” folder – not at your Team Project’s source root

• Branch operation asks you to specify a “branch target” – a location in the source control hierarchy where the branch should live

Page 8: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Mechanics

• Most of the time, this will be a peer – e.g. $/OrderSystem/QA (or whatever the purpose of the branch is)

• Keep clear on the differences between branch parent/child relationships and the physical structure you observe on disk and in source control repository…

Page 9: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Mechanics

• Branch operations result in a set of pending changes (of type “branch”) which must be checked in before branch is made real

• Branching can cross TFS projects as well– Useful for sharing code across

projects when you still desire to build/unit-test independently

Page 10: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Thoughts

• Mental model: Just like workspaces provide isolation for a given developer, branches provide isolation for a group of developers

• Only branch if you have to, and at the point in time required– Branches can happen “after the fact” via

branch-from-label, branch-from-changeset, etc.– (Like at the point in time you need to create a

hotfix…)

Page 11: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Thoughts• Always ask: Will the cost of merging conflicts in

“real time” be higher or lower than the cost of merging conflicts between branches?– Isolation can offer greater near-term productivity (more

parallelism)– Trade off is the risk of instability introduced by the

merge (which increases with time-between-merge)– Merges can often need to flow both ways (“reverse”

and “forward” integration)

• Don’t use branching to maintain different configurations of the same product. Do this at build time, packaging time, or deployment time, etc.

Page 12: Release Management/SCM with TFS Scott Colestock Presented by.

Simplest Branching Model: None

• Keep in mind:– TFS Team Builds are labeled automatically, or you can

apply your own label– You can branch-by-label at a later point in time if you need

to…– You can modify the contents of a label for small-scale

changes

• If your team moves forward together and you have a single release point (e.g. your web site) you may never need to branch– Do you need to actually do service releases/patches?

• Or do you just do another “point” release each month or so?

– Do people work “ahead” on items you don’t intend to release in your next drop?

Page 13: Release Management/SCM with TFS Scott Colestock Presented by.

(Label Detour)

Page 14: Release Management/SCM with TFS Scott Colestock Presented by.

Branch by Label

Page 15: Release Management/SCM with TFS Scott Colestock Presented by.

Label Thoughts• Labels allow you to apply a marker to the current (or past)

state of a file or folder• Usually used to denote a milestone or release• You can apply multiple labels to a version of a file or

folder…• Contents of a label can be edited after the fact (but no

version history of the label is maintained)• Team Build automatically assigns a label to the set of files

associated with each build that it creates.• Trivia: ‘Label scope’ is a path within source control -

underneath which no other labels with the same name can be created– When you use Source Control Explorer, scope = project root

Page 16: Release Management/SCM with TFS Scott Colestock Presented by.

Visualizing Labels

234

185

97

117

103

165

193

• The “contents” of a label is a set of changesets– The minimum number of

changesets needed to describe the state

• All that matters is the “aerial view”

• The fact that other changesets were involved in reaching the labeled state is irrelevant

• Label can be described by the content of the changesets “visible” from the top looking down… Label: 1.05 Release

Page 17: Release Management/SCM with TFS Scott Colestock Presented by.

Label Mechanics• In Source Control Explorer, right-click at appropriate

level and select “Label” to apply a label– To “latest”– Or by date– Or by changeset– (Or by label – Build “Dev Debug_20070319” is also Version 2.4)

• To find/delete/edit – use File-Source Control-Label-Find Label– Edit allows you to choose additional “participants” in the label or

later versions of existing participants

• Use http://shurl.org/tfskicks for advanced label features– Label comparison– Label changeset contents (union of all participant changesets)– Label work items

Page 18: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Models at 10,000 ft

• Lots of religious debate! But many would say…– Develop most new code on the “trunk”

• Aka “main line”, aka “development branch”– Branch per feature and/or per team if absolutely

required– Branch to stabilize and release

• Feature Branch– Isolate work on new or experimental features that might

cause instability to the rest of the project. – Isolate work on interface changes that will cause

instability for the rest of the project.

Page 19: Release Management/SCM with TFS Scott Colestock Presented by.

Branching Models at 10,000 ft

• Team Branch– Isolate sub teams so they can work without being

subject to breaking changes from other teams. – Isolate sub teams so they can work towards unique

milestones. Team branches often have feature branches beneath them.

• Release Branch– Branch for builds that will require you to perform

ongoing service/maintenance (sub-branch for hotfixes)– Branch to pursue/stabilize multiple releases in parallel

Page 20: Release Management/SCM with TFS Scott Colestock Presented by.

Considerations in Branching• Consider structuring branch trees so you only need

to merge up/down the branch hierarchy – not across– Avoids need for “baseless merge” (tf /merge baseless …)– Remember that branch hierarchy likely doesn’t match

repository and file system layout in terms of the “tree”– Merging a change back “up” to main line and “down” to

another branch requires care

• If you branch too deeply (Main -> Team -> Feature -> Experimental work…) you will introduce latency

• Merges require conflict resolution – and bad merge decisions can happen, so the resulting build must be tested thoroughly

Page 21: Release Management/SCM with TFS Scott Colestock Presented by.

A few branching use cases…

Page 22: Release Management/SCM with TFS Scott Colestock Presented by.

Branching to aid nightly build stability…• Dev (aka trunk/main) branch for active check-ins

– “It compiled locally and on build server”– All developers have read/write– Continuous builds (CI) should happen here– Use for quick feedback & feature tests

• Integration branch for integration– “It passed build verification tests”– All developers have read; limited people have read/write– Only merge non-breaking changes from “Dev”– Use as basis for perf, security, integration tests (might

call “Test” branch for this reason)– Nightly builds– Can use as basis for production branches

Page 23: Release Management/SCM with TFS Scott Colestock Presented by.

Branching to stabilize new feature

• Dev branch may have child branches for each feature requiring active, overlapping & isolated development– Dev

• Feature 1• Feature 2• Feature 3

• Only “worth it” if your features frequently collide (broken builds and/or frequent conflicts) and…– the cost of merging conflicts in real time is higher than

the cost of merging conflicts between branches!

Page 24: Release Management/SCM with TFS Scott Colestock Presented by.

Branching for independent teams…

• Dev branch may have child branches for each team that requires active, overlapping & isolated development– Dev

• Team 1

• Team 2

• Team 3

• Only “worth it” if your teams frequently collide (broken builds and/or frequent conflicts) and…– the cost of merging conflicts in real time is higher than

the cost of merging conflicts between branches!– Sometimes true for geographically distributed teams

where communication overhead is high

Page 25: Release Management/SCM with TFS Scott Colestock Presented by.

Branching to isolate changes in external dependencies…

• “Dev” branch may have a child branch where changes to third party libraries (or internal frameworks) are absorbed & tested to ensure no breaking changes

• Merge to Dev/Main can occur once testing complete

Page 26: Release Management/SCM with TFS Scott Colestock Presented by.

Branching to support a release• Dev branch – everyone works here if team marching together…• Integration/Test – merge from Dev and to Production from here

(always the basis for production branch – not last release)• Production branches -

– “Release 1”• Hot fixes are likely labels on the release branch, not new branches…

– “Release 2”• If different teams are pursuing work on different releases and

they require isolation, team may work directly in release branches to pursue stabilization or service/maintenance work– Fixes can be merged back to Dev (aka trunk)– But carefully: The fix might not apply directly!

• V.next work can happen in Dev branch once the release branch has been created. Can be shelved temporarily until that happens.

Page 27: Release Management/SCM with TFS Scott Colestock Presented by.

Branching to support a release• Branch models like this are termed “Mainline

development” or “branch by purpose”• Note: Fixing a bug in Release 1 that also

exists in Release 2 requires careful thought– Can fix at earliest point in time (say Release 1),

merge back to trunk, then merge forward to Release 2

– But this includes risk of taking unwanted main line change into Release 2

– May wish to attempt baseless merge instead in some circumstances

Page 28: Release Management/SCM with TFS Scott Colestock Presented by.

Alternate branching method

• Challenges to using each release branch as basis for next release (as opposed to using mainline):– Not intuitive for developers to point their environment to

different branches (though vs.net makes this easier)– Difficult to work on multiple releases at once – even more

difficult to work on future release• Private branch will require baseless merge

– Easier to work in one branch, knowing work is promoted to appropriate branch

• Advantage is that bug fix in old release only has to be propagated forward (not up to trunk & back down, or across)

• Lots of debate on which model is better…

Page 29: Release Management/SCM with TFS Scott Colestock Presented by.

Branching to model promotions…

• Branch per environment – Dev, QA, Stage, Production…

• Labels mark release points – branch-by-label later if you need to for special purpose

• This method generally accompanied by fine-grained changesets with clear work-item associations

• As you merge from Dev to QA (etc.) you can hand-pick changesets– Or by work item using TeamCM

Page 30: Release Management/SCM with TFS Scott Colestock Presented by.

Team Foundation Promotion Modeling(Branches of varying quality)

foo.csfoo.cs

bar.csbar.cs

$/…/Dev$/…/Dev

$/…/Test$/…/Test

$/…/Prod$/…/Prod1818

1818

foo.csfoo.cs

bar.csbar.cs 1313

1313

foo.csfoo.cs

bar.csbar.cs 99

99

1010

1212

1515

1414

1616

1515

2020

1919

2222

2121

2525

2525

1717

1717

2323

2323

2626

2626

2424

2424

2727

2727

After 12: Branch to test = 13After 16: Merge latest to test = 17After 17: Branch to prod = 18After 22: Merge 21, 22 to test = 23After 23: Merge latest to prod = 24After 25: Merge latest to test=26After 26: Merge latest to prod=27

Page 31: Release Management/SCM with TFS Scott Colestock Presented by.

Merging Mechanics in TFS

• When you merge, you initiate from the “source” – where the changes are coming “from”– Then choose merge “target”

• Can merge by:– Latest version– Label– Date– Changeset

Page 32: Release Management/SCM with TFS Scott Colestock Presented by.

Merging

• Can merge by:– Selecting individual changeset(s)…

• Useful for handpicking bug fixes or changes to merge• Closed bugs (work items) will tell you which changesets are

associated fix/change• Must be a contiguous range of changes for a given merge

operation (ouch)• Keep your changesets fine-grained !

– Or use TeamCM to merge by work item

Page 33: Release Management/SCM with TFS Scott Colestock Presented by.

Merging• Merge includes content additions, deletions,

un-deletions, renames, moves…not just changes between two files!

• Merge operations can require conflict resolution if development is occurring in the merge target

• Note that merge requires your workspace to have “visibility” to all branches involved

• Note that merge process itself doesn’t update the target branch on your local disk – but that is where merge will take place from !

Page 34: Release Management/SCM with TFS Scott Colestock Presented by.

Merging• Merge operations result in a set of pending

changes (of type “merge”) which must be checked in (and will result in single changeset)

• Merge history maintained for you – system knows what the “remaining” merge candidates are from branch parent to branch child (unlike svn)

Page 35: Release Management/SCM with TFS Scott Colestock Presented by.

Agenda

• Branching & Merging – Mechanics within TFS– Strategies

• How does Team Build help with SCM?• Carrying through to physical environments

– TFS Deployer

Page 36: Release Management/SCM with TFS Scott Colestock Presented by.

SCM Mileage from Team Build• Team Build can be used in “branch aware” fashion

(i.e. a build type per branch)• Multiple build types can be created for each branch…

– In Debug, Release variants…– For continuous integration, nightly schedule, or on-demand– With different levels of post-build automated testing– Each producing a list of changesets that have been

incorporated since last build (though merge operations will appear as one changeset if checked in together)

• Depending on which CI solution you use, you can enact dependency replication as part of build– TFS Integrator will do this…– (Or use MSDN sample)

Page 37: Release Management/SCM with TFS Scott Colestock Presented by.

SCM Mileage from Team Build• If you have a team build type per branch…• And you have continuous integration configured

for each branch…• Then every merge between branches (Dev->Test

or FeatureX->Main) will trigger a build• The “branch build” can involve unit tests that are

assessing (in part) whether the merge operation produced good results– Valuable, since merges often error prone

Page 38: Release Management/SCM with TFS Scott Colestock Presented by.

CI for TFS 2005

Page 39: Release Management/SCM with TFS Scott Colestock Presented by.

CI for TFS 2008

Page 40: Release Management/SCM with TFS Scott Colestock Presented by.

Agenda

• Branching & Merging – Mechanics within TFS– Strategies

• How does Team Build help with SCM?• Carrying through to physical

environments– TFS Deployer

Page 41: Release Management/SCM with TFS Scott Colestock Presented by.

SCM Definition Revisited• “The process of identifying and selecting

all the elements of a software system that create the correct and cohesive set - at defined points in time.”

• Once you have a branching/merging strategy in place, and a corresponding set of builds that occur based on those branches…

• Carry it through to a set of automated deployments to corresponding physical environments!

Page 42: Release Management/SCM with TFS Scott Colestock Presented by.

TFS Deployer (Readify)• See http://shurl.org/tfsdeployer• Installed as an agent on servers that you must

deploy to– Dev environment, Test environment…Production?

• Listens to build quality change events– Build quality is edited within build store in vs.net– Build store notifies event service, which lets all

subscribers (including TFS Deployer) know about quality change

Page 43: Release Management/SCM with TFS Scott Colestock Presented by.

TFS Application/Database Server

Target Machine

TFS Build Store

TFS Event Service

TFS Event Subscription Store

Developer Machine

User running Team Explorer

2 – Update Build Quality

TFSDeployer Service

1 – Subscribe to build qualitychange events

3 – Build Quality Change Event

4 – Subscriber Information

5 – Build Quality Change Event

PowerShell Instance

TFS Version Control Store

6 – Deployment Mapping File and PowerShell Script

7 – Create Power Shell Instanceand run script

Page 44: Release Management/SCM with TFS Scott Colestock Presented by.

TFS Deployer (Readify)• TFS Deployer uses deployment mapping file

(checked into subfolder of team build type) to determine what (if any) action to take– Deployment file might indicate that a deployment for

test servers should be kicked off when build quality transitions from “Dev Accepted” to “Test Staging”

• Deployment Mapping file associates servers to actions based on build quality transitions for a given build– Can deploy to a farm by having multiple servers listed– Actions are powershell scripts

Page 45: Release Management/SCM with TFS Scott Colestock Presented by.
Page 46: Release Management/SCM with TFS Scott Colestock Presented by.

Team Build and “Build Quality”

• Build Quality names in Team Build are customizable – so choose to match your process!

• Mitch Denny (Readify) suggests:– Unexamined– Development Staging/Accepted/Rejected– Test Staging/Accepted/Rejected– Production Staging/Accepted/Rejected

• Transitions can be secured…

Page 47: Release Management/SCM with TFS Scott Colestock Presented by.

Synergies from the whole…• When you have a good branch/merge strategy…• With corresponding automated builds…(per branch)• And appropriate & integrated automated unit

tests…• With automated deployments to corresponding

physical environments…• You will find a whole host of positive team behaviors

can emerge !– Because time isn’t lost due to poor SCM (wrong software in

the wrong place, incorrectly deployed)– Because the team can treat that infrastructure as a given…– From identified bug to a traceable, farm-deployed fix in 10

minutes ?

Page 48: Release Management/SCM with TFS Scott Colestock Presented by.

Extending release management to database artifacts: Visual Studio for Database Pros

• Database Refactoring• Schema comparison• Data generation tools• Database unit testing tools• Database projects…

– Ability to harvest all schema objects from existing scripts or live schema

– Triggers, functions, security elements, sprocs, tables, view, constraints, indexes, keys, triggers, UDT…

– House in a single project with both “script centric” and “schema centric” views

Page 49: Release Management/SCM with TFS Scott Colestock Presented by.

Visual Studio for Database Pros• Key idea is to bring database development work

into the standard development lifecycle– Version control (branching/merging)– Collaboration with team– Unit tests

• Ideal: Each team member has local copy of database, where changes to sprocs, etc. made in isolation – and then unit tested

• Communication of schema/sproc changes to team and propagation through environments begins with check-in!

• “Building” a database project is an operation that is relative to a target environment– And…it generates the correct update script for you– Customization (and pre/post scripts) available for cautious

DBAs once you are targeting stage/production

Page 50: Release Management/SCM with TFS Scott Colestock Presented by.

Thanks -