Define dependencies for task groups and tasks in plug-in files
Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013
This article applies to project customization for Hosted XML and On-premises XML process models. For the Inheritance process model, see Customize a process. For an overview of process models, see Customize your work tracking experience.
When you add a task group or a task to a plug-in file, you must add them in the correct sequence and declare any dependencies that the group or task has on the successful completion of other task groups or tasks. A task can depend on other tasks, requiring other tasks to complete before primary task can run. For example, the task to create work item queries cannot run until all the tasks to create work item types have successfully completed. Therefore, the task to upload work item queries depends on the task to upload the types of work items.
Required plug-ins and plug-in dependencies
The following illustration shows the dependent relationships that are defined for the Team Foundation Server (TFS) process templates. As the illustration shows, the plug-in for Work Item Tracking depends on the successful completion of the plug-in for Groups and Permissions, which depends on the successful completion of the plug-in for Classifications. The plug-ins for both Test Management and Version Control depend on the completion of the first three plug-ins. The plug-ins for Build, Lab, Reports, and Portal depend on the completion of the plug-in for Version Control.
If you define your task groups and tasks in each plug-in file in the same order as their dependencies, you make reading the file and eliminating dependency problems easier.
Dependencies can be used to indicate the order in which plug-ins run in the New Team Project Wizard. Some plug-ins are always dependent on other plug-ins. Also, not all plug-ins are required for a process template.
The following table identifies which plug-ins depend on other plug-ins. Only the plug-in for Classifications is required. All other plug-ins are optional. For more information about each plug-in, see Overview of process template files.
|Lab||Build, Classifications, Groups, WorkItemTracking|
|Portal||Classifications, Reporting, VersionControl, and WorkItemTracking|
|Reporting||Classifications, VersionControl, and WorkItemTracking|
|TestManagement||Classifications, Groups, and WorkItemTracking|
|VersionControl||Classifications, Groups, and WorkItemTracking|
|WorkItemTracking||Classifications and Groups|
Define task group dependencies
Use the dependency element in tasks and groups to indicate when a dependency exists. The following example shows how to use the dependency element to specify that the WorkItemTracking task group depends on the Classification and Groups task groups.
<group id="WorkItemTracking" description="Workitem definitions uploading." completionMessage="Workitem definitions uploaded."> <dependencies> <dependency groupId="Classification"/> <dependency groupId="Groups"/> </dependencies> <taskList filename="WorkItem Tracking\WorkItems.xml"/> </group>
The groupId element references the id element value in the other group.
The following table describes the elements that you use to define task group dependencies. For more information about how to define task groups, see Process template XML elements reference.
|Element||Description and syntax|
|dependencies||Required child element of group. Specifies the other groups on which a group depends.
|dependency||Optional child element of dependencies. Specifies the ID of another task group on which this group depends. The other group must complete its tasks before this task group can start.
Defining task dependencies
The following example shows how to use the dependency element to specify that the WorkItems task depends on the task with an ID of "WITs."
<task id="WIs" name="WorkItems" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work items uploaded" completionDescription="Processing the actual work items used by work item tracking"> <dependencies> <dependency taskId="WITs" /> </dependencies>
The following table describes the elements that you use to define task dependencies. For more information about how to define tasks, see Define the tasks to process a plug-in.
|Element||Description and syntax|
|dependencies||Optional child element of task. Specifies the other tasks on which a task depends.
|dependency||Optional child element of dependencies. Specifies the ID of another task on which this task depends. The other task must complete its tasks before this task can start.