Extend the functionality of Team Build creating custom build tasks. Utilize Team Deploy, a set of custom tasks to deploy MSIs to remote machines. I presented this to the Omaha Team System User Group Meeting on 05/27/2008
Team Foundation Server
Give me a Light, Build Light
• Current Lead Developer / Analyst at Farm Credit
Services of America
• Wide variety background in .NET
– Web Services, Remoting, WCF, WinForms, ASP.NET,
Biztalk, TFS, CSLA.NET, Code Generation
• Frameworks, Code Generation, and Agile Blog
• Open Source Project for TFS Builds
• 3rd .NET User Group Presentation
• Build Automation – more than just build
• Creating a build
• What’s in a build – Proj, Targets, and Tasks
• Creating a Custom Task
• Team Deploy
• Should be part of a good configuration
• Our Goal – Deploy same MSI to test as
– Separate Environments
• Development, Test, Staging, Production
– Continuous and “Build and Deploy” Builds
– Admin Install MSIs
– ConfigFiles folder for multiple environments
What is in a build?
• TFSBuild.proj – XML for TeamBuild
• Targets – “Events” of the build, Before/After
are overrideable for custom functionality.
• Tasks – built in or custom actions that perform
a set piece of functionality.
End to End Iteration
Drop Build Files
• Commonly used ones
Target Name Description
BeforeEndtoEndIteration Runs tasks before EndToEndIteration target. Use this
to run something before the build starts.
Example: Turn street light yellow.
AfterEndtoEndIteration Runs tasks after EndToEndIteration target. Use this to
run something after the build successfully completes.
Example: Copy Binaries and Config Files to MSI,
Deploy MSI, Turn on Green Street Light
BeforeTest Called before tests are run.
Example: Update or Prepare database or spreadsheet
for Unit Tests
AfterOnBuildBreak Called after a work item is created when a build fails
Example: Turn on Red Street Light
Other Overridable Targets
Target Name Description
BuildNumberOverrideTarget Used to override a target to customize a build number. The task you write must
create an ouptut property called BuildNumber
BeforeClean Called before clean is tried. Insert your task into this target to run pre-clean
AfterClean Called after clean is completed.
BeforeGet Called before sources are retrieved from source control
AfterGet Called after sources are retrieved
BeforeLabel Called before sources are labeled.
AfterLabel Called after labeling is completed.
BeforeCompile Called before compilation is completed.
AfterCompile Called after compilation is completed.
AfterTest Called after testing is completed.
BeforeDropBuild Called before saving the built binaries, build log files and test results to the build-
AfterDropBuild Called after dropping the built binaries, build log files and test results to the
BeforeOnBuildBreak Called before creating a work item on the build that fails
• Built in tasks
– About 45 built in tasks
– Complete List
• Custom tasks projects
– SDC (over 300 tasks!)
– Community Tasks (about 50 tasks)
– Team Deploy (Dedicated to Deployments)
Creating a custom task
• Microsoft.Build.Utilities.Task base class
public override bool Execute()
Creating a custom task (cont)
• Unit Tests – BuildEngine
public void KillProcessExecute()
KillProcess task = new KillProcess();
task.BuildEngine = new MockBuild();
task.ProcessName = quot;notepad.exequot;;
task.KillAppPathFilename = quot;c:pstoolspskill.exequot;;
task.TargetMachine = Environment.MachineName;
Assert.IsTrue(task.Execute(), quot;Execute Failedquot;);
• Today is the launch of 1.0.0!
• 273 Downloads!
• Set of Custom Tasks
– Deploying MSIs
– Controlling Devices like Lava Lamps and Street
• DeviceController Application
• Guidance Document
Team Deploy Features
• Parallel MSI Deployments
• Unit Tests
• Code Analysis = Green
• No unknown programs need to run on target
• Utilizes strength and trust of PS Tools.
Team Deploy Tasks
Task Name Description
Install Installs a MSI to a target machine
Uninstall Uninstalls MSI on target machine by product code
KillProcess Kills a process on a target machine
StartService Starts are windows service
StopService Stops a windows service (usually before uninstalling)
DeviceController Use lava lamps or street lights to display status of builds
Deploy Primary Task – Reads Deployment Script. The script contains the
list of target machines, MSIs to install, any kill processes, and
• Calls the x10Communicator.exe (part of Team
Deploy) to turn on and off devices
• StartTime and StopTime so device doesn’t
turn on at night
• Device state is stored in Isolated Storage
• Start and Shutdown arguments to turn all
devices either on or off.