2014-09-19 44 views

回答

0

我不认为有内置的活动来链接构建。

我有一个自定义活动,当我需要它们时,用它排队附加构建。

码是如下

using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Build.Workflow; 
using Microsoft.TeamFoundation.Client; 
using System; 
using System.Activities; 
using System.Collections.Generic; 

namespace BuildTasks.Activities 
{ 
    // Queue a new build from the same Team Project. 
    [BuildActivity(HostEnvironmentOption.Agent)] 
    public sealed class QueueNewBuildwithParam : CodeActivity 
    { 
     // The Team Project that the build definition belongs to. 
     [RequiredArgument] 
     public InArgument<IBuildDetail> BuildDetail { get; set; } 

     // The build definition to queue 
     [RequiredArgument] 
     public InArgument<String> BuildDefinition { get; set; } 

     // The ParamName 
     [RequiredArgument] 
     public InArgument<String> ParamName { get; set; } 

     // The Param Value 
     [RequiredArgument] 
     public InArgument<String> ParamValue { get; set; } 

     protected override void Execute(CodeActivityContext context) 
     { 
      // Obtain the runtime value of the input arguments 
      string buildDefinition = context.GetValue(this.BuildDefinition); 
      IBuildDetail buildDetail = context.GetValue(this.BuildDetail); 
      string paramValue = context.GetValue(this.ParamValue); 
      string paramName = context.GetValue(this.ParamName); 


      // Obtain the Team Project for the current build definition. 
      string tfsProject = buildDetail.BuildDefinition.TeamProject; 

      string configurationServerUri = buildDetail.BuildServer.TeamProjectCollection.Uri.ToString(); 

      TfsTeamProjectCollection server = new TfsTeamProjectCollection(new Uri(configurationServerUri)); 
      server.EnsureAuthenticated(); 
      IBuildServer buildServer = (IBuildServer)server.GetService(typeof(IBuildServer)); 
      IBuildDefinition buildDef = buildServer.GetBuildDefinition(tfsProject, buildDefinition); 
      IBuildRequest request = buildDef.CreateBuildRequest(); 
      request.ProcessParameters = UpdateBuildDefinitionParam(buildDef.ProcessParameters, paramName, paramValue); 
      buildServer.QueueBuild(request); 
     } 

     private static string UpdateBuildDefinitionParam(string processParameters, string param, string newValue) 
     { 
      IDictionary<String, Object> paramValues = WorkflowHelpers.DeserializeProcessParameters(processParameters); 
      paramValues[param] = newValue; 
      return WorkflowHelpers.SerializeProcessParameters(paramValues); 
     } 
    } 
} 
相关问题