获取TFS构建计划

时间:2014-06-11 15:22:16

标签: tfs tfs2010

我正在尝试为所有构建编写查询,但未能理解表[tbl_Schedule]中的[ScheduleTime]列。

SELECT bd.DefinitionName 'Name', s.ScheduleTime 'ScheduleTime', s.ScheduleTime/1800 'Hour'
FROM [TFS_FTPDev].[dbo].[tbl_Schedule] s
inner join [TFS_FTPDev].[dbo].[tbl_BuildDefinition] bd on 
bd.[DefinitionId]=s.[DefinitionId]
where ContinuousIntegrationType in (8,16)
order by s.ScheduleTime asc

如果我除以3600,我得到一个合理的数据,但它对我的所有构建都无效...即Build1和build2计划在13:00进行几天....

name   ScheduleTime Hour
build1 43200    12
build2 43200    12
build3 68400    19
build4 77400    21.30
build5 79200    22
build6 82800    23
build7 84600    23.30
build8 84600    23.30
build9 84600    23.30

,映射是:

when 84600 then 23.30 
when 79200 then 22 
when 77400 then 21.30 
when 68400 then 19 
when 43200 then 12 

更新:[使用TFS API]

这是手动触发/预定构建的API results ...

API results for a manually triggered/scheduled build

这是subset of results

Subset of Results from TFS API

3 个答案:

答案 0 :(得分:1)

您是否看过TFS Build API中的QueryBuilds方法,而不是从数据库中读取(不受支持)?

答案 1 :(得分:1)

ISchedule.StartTime Property的文档说

  

获取或设置时间为午夜过后的秒数

所以你应该除以3600得到起始时间,余数除以60是一小时内的起始分钟。 我错过了什么吗?

答案 2 :(得分:0)

我不确定你在问什么,但如果你使用3,600(60秒x 60分钟),你会得到预期的值。

  • 00:00 = 3600
  • 00:30 = 5400
  • 04:00 = 14400
  • 05:30 = 19800
  • 23:00 = 82800

关于为什么有些人在手动构建时有时间表的问题可以通过以下方式复制:

  • 创建构建定义
  • 安排它
  • 克隆构建定义
  • 重命名并保存更改触发器类型
  • 即使从未安排过此版本,它仍然包含预定时间

因此,我建议您查询的构建实际上已从另一个构建克隆,然后元数据发生更改,当构建从计划更改为非计划时,似乎不会清除计划时间。无论是在他们的历史中还是在他们的历史中的某个时刻,他们都有一个预定的时间设置,此后已被更改