2014-06-11 122 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