2014-06-11 125 views
1

我想为所有构建编写查询,但未能理解表[tbl_Schedule]中的[ScheduleTime]列。获取TFS构建计划

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 

UPDATE:[使用TFS API]

而这正是API results为手动触发/计划建设...

API results for a manually triggered/scheduled build

这是subset of results

Subset of Results from TFS API

+2

我建议您使用公共TFS Api代替...对于灵感:http://stackoverflow.com/questions/5263005/tfs-api-how-to-query-builds-independent-of-which-build -definition-they-belong –

+0

如果你想查询一个构建[一个完成的构建是一个动态数据]并且你想查看状态,那么这个特定构建的细节就完美了。我需要构建定义[更多静态数据] ... – demokritos

回答

1

你已经采取了看看在TFS的QueryBuilds方法构建的API,而不是从数据库读取(不受支持)?

+0

恐怕相同的数字来自[TFS API](http://continuousdevelopment.files.wordpress.com/2014/07/stakoverflow_tfsbuildschedule.png)手动触发/预定buid ... 这是[子集的结果](http://continuousdevelopment.files.wordpress.com/2014/07/stakoverflow_tfsbuildschedule2.png) – demokritos

+1

我错过了一个简单的启用列让我您的答案之上的实际时间表。 TFS API执行相同的结果集,但我会使用它,谢谢。 – demokritos

0

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

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

你关于为什么一些人有手动搭建时间表的问题可以复制:

  • 创建构建定义
  • 附表它
  • 克隆生成定义
  • 将其重命名并保存改变触发型前
  • 虽然此版本从未被定它仍包含在计划时间

因此,我建议您查询的构建实际上是从另一个构建克隆的,然后元数据发生了变化,当构建从计划更改为非计划时,计划时间似乎不会被清除。如果不是这样,在他们的历史期间的某个时刻,他们都产生了预定的时间设定,这已经被改变

+0

我感觉,3600看起来像一个关键......但是,这就是我的问题......我不能解释85800/3600 = 23:50 ......我无法解释为什么一些14400是手动的,为什么有些是预定的触发器。 – demokritos

+0

我已经更新了我的答案,以包括为什么计划的时间显示为未计划的构建。以及如何复制它 –

1

ISchedule.StartTime Property文档说

获取或设置时间为秒午夜

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

+0

这是正确的Giulio,并且时序听起来很正确,但是如果我将这个值与实际构建时间进行比较,那么对于这些​​构建,我会得到不同的行为[手动触发,而不是按计划]。可能我缺少一个简单的布尔值来让我[结果](http://continuousdevelopment.files.wordpress.com/2014/07/stakoverflow_tfsbuildschedule2.png) – demokritos