如何在TFS 2012中启动另一个生成定义

如何在TFS 2012中启动另一个生成定义,tfs,Tfs,我使用TFS 2012。我需要自定义构建定义的默认模板,以便在构建结束时启动另一个构建定义 我应该向工作流中添加哪些元素?我认为没有内置的活动来链接构建 我有一个自定义活动,当我需要其他构建时,我可以使用它来排队 代码如下 using Microsoft.TeamFoundation.Build.Client; using Microsoft.TeamFoundation.Build.Workflow; using Microsoft.TeamFoundation.Client; using S

我使用TFS 2012。我需要自定义构建定义的默认模板,以便在构建结束时启动另一个构建定义


我应该向工作流中添加哪些元素?

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

我有一个自定义活动,当我需要其他构建时,我可以使用它来排队

代码如下

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);
        }
    }
}
使用Microsoft.TeamFoundation.Build.Client;
使用Microsoft.TeamFoundation.Build.Workflow;
使用Microsoft.TeamFoundation.Client;
使用制度;
使用系统活动;
使用System.Collections.Generic;
命名空间BuildTasks.Activities
{
//将来自同一团队项目的新生成排队。
[BuildActivity(HostenEnvironmentOption.Agent)]
公共密封类QueueNewBuildwithParam:CodeActivity
{
//生成定义所属的团队项目。
[必需参数]
公共InArgument BuildDetail{get;set;}
//要排队的生成定义
[必需参数]
公共InArgument构建定义{get;set;}
//参数名
[必需参数]
公共InArgument参数名{get;set;}
//参数值
[必需参数]
公共InArgument参数值{get;set;}
受保护的覆盖无效执行(CodeActivityContext上下文)
{
//获取输入参数的运行时值
string buildDefinition=context.GetValue(this.buildDefinition);
IBuildDetail buildDetail=context.GetValue(this.buildDetail);
字符串paramValue=context.GetValue(this.paramValue);
字符串paramName=context.GetValue(this.paramName);
//获取当前生成定义的团队项目。
字符串tfsProject=buildDetail.BuildDefinition.TeamProject;
string configurationServerUri=buildDetail.BuildServer.TeamProjectCollection.Uri.ToString();
TfsatmProjectCollection服务器=新TfsatmProjectCollection(新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(请求);
}
私有静态字符串UpdateBuildDefinitionParam(字符串processParameters、字符串param、字符串newValue)
{
IDictionary paramValues=WorkflowHelpers.DeserializeProcessParameters(processParameters);
paramValues[param]=新值;
返回WorkflowHelpers.SerializeProcessParameters(paramValues);
}
}
}
使用成熟的;有一个
QueueBuild
活动可供使用。有关定制研究的指导