TFS 2017 - 检索触发器信息构建定义

时间:2018-02-20 08:13:13

标签: tfs tfsbuild

我试图通过我的C#应用​​程序检索vNext BuildDefinitions的时间表。

我可以检索我需要的BuildDefinition对象。

List<BuildDefinitionReference> builddefs = buildClient.GetDefinitionsAsync().Result;

var buildDef = buildClient.GetFullDefinitionsAsync(project: project,
name: buildDefName).Result.ToArray();

但是在查看BuildDefinition.Trigger信息时,这似乎并不包含我需要的内容。 与XAML构建模拟,我希望能够读取BuildDefinition.Schedules,以查看每个构建的安排时间。

谁知道这些信息目前保存在哪里?

更新: 通过将BuildTrigger转换为ScheduleTrigger

来解决此问题
if (buildDefinition.Triggers != null)
{
    foreach (BuildTrigger trigger in buildDefinition.Triggers)
    {
        if (trigger is ScheduleTrigger)
        {
            ScheduleTrigger scheduleTrigger = trigger as ScheduleTrigger;

            foreach (var schedule in scheduleTrigger.Schedules)
            {
                //Do magic
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您可以将Rest API用于Get a build definition,示例:

GET https://tfsserver:8080/tfs/DefaultCollection/Fabrikam-Fiber-Git/_apis/build/definitions/29?api-version=2.0

然后您将得到如下的响应,其中包括触发器信息:

  "triggers": [
    {
      "schedules": [
        {
          "branchFilters": [
            "+$/MyFirstProject/Test"
          ],
          "timeZoneId": "UTC",
          "startHours": 3,
          "startMinutes": 0,
          "daysToBuild": "all",
          "scheduleJobId": "18316444-edbb-479d-950d-7714ba39d3d6",
          "scheduleOnlyWithChanges": true
        }
      ],
      "triggerType": "schedule"
    }

每个成员供您参考:

  

<强>成员

     

branchFilters: string []。

     

daysToBuild: ScheduleDays。构建日期(星期几的标记枚举)

     

scheduleJobId:字符串。将对计划的构建进行排队的计划作业的作业ID。由于单个触发器可以有多个   时间表,我们希望单个工作处理单个时间表(从那时起)   每个计划都有一个要建立的分支列表),计划本身   需要定义作业ID。这个值将在a时填写   添加或更新定义。用户界面不提供或使用它。

     

startHours:号码。当地时区开始时间

     

startMinutes:号码。当地时区分钟开始

     

timeZoneId:字符串。构建计划的时区(时区ID的字符串表示)

详情请参阅Schedule Rest API。

答案 1 :(得分:0)

Microsoft.TeamFoundationServer.ExtendedClient包更新到最新版本, GetFullDefinitionsAsync 方法应返回存储在触发器属性而非Schedules属性中的计划信息。