TFS 2017 - 检索触发器信息构建定义
TFS 2017 - Retrieve Trigger information build definitions
我正在尝试通过我的 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
}
}
}
}
您可以使用 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"
}
以及各成员供大家参考:
Members
branchFilters: string[].
daysToBuild: ScheduleDays. Days for a build (flags enum for days of the week)
scheduleJobId: string. The Job ID of the Scheduled job that will queue the scheduled build. Since a single trigger can have multiple
schedules and we want a single job to process a single schedule (since
each schedule has a list of branches to build), the schedule itself
needs to define the Job Id. This value will be filled in when a
definition is added or updated. The UI does not provide it or use it.
startHours: number. Local timezone hour to start
startMinutes: number. Local timezone minute to start
timeZoneId: string. Time zone of the build schedule (string representation of the time zone id)
详情请参考Schedule 休息API.
将 Microsoft.TeamFoundationServer.ExtendedClient 包更新到最新版本,GetFullDefinitionsAsync 方法应该 return 存储在 中的计划信息触发器 属性 而不是计划 属性.
我正在尝试通过我的 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
}
}
}
}
您可以使用 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"
}
以及各成员供大家参考:
Members
branchFilters: string[].
daysToBuild: ScheduleDays. Days for a build (flags enum for days of the week)
scheduleJobId: string. The Job ID of the Scheduled job that will queue the scheduled build. Since a single trigger can have multiple schedules and we want a single job to process a single schedule (since each schedule has a list of branches to build), the schedule itself needs to define the Job Id. This value will be filled in when a definition is added or updated. The UI does not provide it or use it.
startHours: number. Local timezone hour to start
startMinutes: number. Local timezone minute to start
timeZoneId: string. Time zone of the build schedule (string representation of the time zone id)
详情请参考Schedule 休息API.
将 Microsoft.TeamFoundationServer.ExtendedClient 包更新到最新版本,GetFullDefinitionsAsync 方法应该 return 存储在 中的计划信息触发器 属性 而不是计划 属性.