如何在 TFS 构建中设置 "PreviousBuild" 属性 of AssociateChanges activity
How to set "PreviousBuild" property of AssociateChanges activity in TFS Builds
我想在我们的自定义构建定义(TFS2013 更新 2、VS2013、Git)中使用 Microsoft.TeamFoundation.Build.Activities.AssociateChanges activity。
我想设置此 activity 的 IBuildDetail 类型的 PreviousBuild 属性,以引用特定的 TFS 构建,例如 "CustomBuild_20151007.3"。
问题:如何在属性 window[=27] 中设置 AssociateChanges activity 的 PreviousBuild 属性 =](下面的屏幕截图),还是我必须创建自定义构建 activity?
MSDN reference 没有示例代码,到目前为止我只看到 IBuildDetail 是从 CodeActivityContext 中获取的(在 CodeActivity 派生的 类 中)。知道如何实例化它以将其作为 属性 值传递吗?
您需要创建自定义构建 activity 通过 tfs api 传递 IBuildDetail 参数。
来自 MSDN 的 IBuildDetail 接口:
https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuilddetail(v=vs.120).aspx
关于IBuildDetail的使用,使用IBuildDetail查询构建定义的例子供参考:
class Program
{
static void Main(string[] args)
{
// Auth with UserName & Password (Microsoft Acc):
//BasicAuthCredential basicCred = new BasicAuthCredential(new NetworkCredential("xxx@hotmail.com", "pw"));
//TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred);
//tfsCred.AllowInteractive = false;
//
//TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"), tfsCred);
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"));
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
var builds = buildServer.QueryBuilds("DrinkHub");
foreach (IBuildDetail build in builds)
{
var result = string.Format("Build {0}/{3} {4} - current status {1} - as of {2}",
build.BuildDefinition.Name,
build.Status.ToString(),
build.FinishTime,
build.LabelName,
Environment.NewLine);
System.Console.WriteLine(result);
}
// Detailed via http://www.incyclesoftware.com/2012/09/fastest-way-to-get-list-of-builds-using-ibuildserver-querybuilds-2/
var buildSpec = buildServer.CreateBuildDetailSpec("DrinkHub", "Main.Continuous");
buildSpec.InformationTypes = null;
var buildDetails = buildServer.QueryBuilds(buildSpec).Builds;
Console.WriteLine(buildDetails.First().Status);
Console.ReadLine();
}
}
我想在我们的自定义构建定义(TFS2013 更新 2、VS2013、Git)中使用 Microsoft.TeamFoundation.Build.Activities.AssociateChanges activity。
我想设置此 activity 的 IBuildDetail 类型的 PreviousBuild 属性,以引用特定的 TFS 构建,例如 "CustomBuild_20151007.3"。
问题:如何在属性 window[=27] 中设置 AssociateChanges activity 的 PreviousBuild 属性 =](下面的屏幕截图),还是我必须创建自定义构建 activity?
MSDN reference 没有示例代码,到目前为止我只看到 IBuildDetail 是从 CodeActivityContext 中获取的(在 CodeActivity 派生的 类 中)。知道如何实例化它以将其作为 属性 值传递吗?
您需要创建自定义构建 activity 通过 tfs api 传递 IBuildDetail 参数。
来自 MSDN 的 IBuildDetail 接口: https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuilddetail(v=vs.120).aspx
关于IBuildDetail的使用,使用IBuildDetail查询构建定义的例子供参考:
class Program
{
static void Main(string[] args)
{
// Auth with UserName & Password (Microsoft Acc):
//BasicAuthCredential basicCred = new BasicAuthCredential(new NetworkCredential("xxx@hotmail.com", "pw"));
//TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred);
//tfsCred.AllowInteractive = false;
//
//TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"), tfsCred);
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("https://code-inside.visualstudio.com/DefaultCollection"));
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
var builds = buildServer.QueryBuilds("DrinkHub");
foreach (IBuildDetail build in builds)
{
var result = string.Format("Build {0}/{3} {4} - current status {1} - as of {2}",
build.BuildDefinition.Name,
build.Status.ToString(),
build.FinishTime,
build.LabelName,
Environment.NewLine);
System.Console.WriteLine(result);
}
// Detailed via http://www.incyclesoftware.com/2012/09/fastest-way-to-get-list-of-builds-using-ibuildserver-querybuilds-2/
var buildSpec = buildServer.CreateBuildDetailSpec("DrinkHub", "Main.Continuous");
buildSpec.InformationTypes = null;
var buildDetails = buildServer.QueryBuilds(buildSpec).Builds;
Console.WriteLine(buildDetails.First().Status);
Console.ReadLine();
}
}