Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Team Foundation Server Build Automation


Published on

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

Published in: Technology
  • Be the first to comment

Team Foundation Server Build Automation

  1. 1. Team Foundation Server Build Automation Give me a Light, Build Light Mike Douglas
  2. 2. About Me • 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
  3. 3. Agenda • Build Automation – more than just build • Creating a build • What’s in a build – Proj, Targets, and Tasks • Creating a Custom Task • Team Deploy
  4. 4. Build Automation • Should be part of a good configuration management process • Our Goal – Deploy same MSI to test as production – Separate Environments • Development, Test, Staging, Production – Continuous and “Build and Deploy” Builds – Admin Install MSIs – ConfigFiles folder for multiple environments
  5. 5. ConfigFiles folder
  6. 6. Creating a Build • Demo
  7. 7. 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. Quick Demo
  8. 8. Build Targets End to End Iteration Clean Get Source Build Break Build Error Label Compile Run Tests Drop Build Files
  9. 9. Targets • 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
  10. 10. 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 custom target. 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- drop directory. AfterDropBuild Called after dropping the built binaries, build log files and test results to the build-drop directory. BeforeOnBuildBreak Called before creating a work item on the build that fails
  11. 11. Tasks • 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)
  12. 12. Creating a custom task • Microsoft.Build.Framework.ITask • Microsoft.Build.Utilities.Task base class public override bool Execute() { DoSomething(); return true; }
  13. 13. Creating a custom task (cont) • Unit Tests – BuildEngine [TestMethod] public void KillProcessExecute() { Process.Start(quot;notepad.exequot;); 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;); }
  14. 14. Create a custom task • Demo
  15. 15. Team Deploy • Today is the launch of 1.0.0! • 273 Downloads! • Set of Custom Tasks – Deploying MSIs – Controlling Devices like Lava Lamps and Street Lights • DeviceController Application • Guidance Document
  16. 16. Team Deploy Features • Parallel MSI Deployments • Unit Tests • Code Analysis = Green • No unknown programs need to run on target machines • Utilizes strength and trust of PS Tools.
  17. 17. Team Deploy Architecture
  18. 18. 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 uninstalls.
  19. 19. Device Controller • 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.
  20. 20. Device Controller Parts • X10 Firecracker
  21. 21. Team Deploy Demo • Street Light Demo
  22. 22. Links • X10 Firecracker • SysInternals PSExec • • •