2013-04-30 53 views
2

我們目前有一個「相當」的CI不可知的MSBuild腳本,正在構建在TeamCity上。TFS不可知的MSBuild腳本

腳本執行以下操作:

  1. 版本使用TeamCity的版本號
  2. 編譯溶液
  3. 運行使用NUnit
  4. 一組單元測試的組件屬性運行一組接受使用NUnit和SpecFlow的測試
  5. 使用Pickles生成一些文檔
  6. 存儲工件小號
  7. 標籤/標籤的修訂GIT與當前版本號

我說「相當」 CI無關,因爲有一對夫婦,我們通過MSBuild的消息任務內容發佈到TeamCity的地方。

我們現在已經從業務部門獲得指導,將構建和源代碼從GIT移至TFS。我使用的最後一個Microsoft源代碼控制是SourceSafe,我沒有使用TFS作爲CI服務器的經驗。我想知道我們是否可以像現在一樣將MSBuild腳本保持爲不可知的,並且仍然實現它現在具有的相同功能。

回答

2

您可以輕鬆地從TFS Build中調用MSBuild腳本。我相信它要求構建解決方案的地方,你可以給它提供任何MSBuild文件(不知道我是否曾經指定過非sln文件),但如果由於某種原因不起作用,你可以做一個小的調整到TFS構建模板並使用MSBuild活動來調用您希望的任何MSBuild腳本。

您可以通過編輯構建模板(或通過編輯構建定義的靜態參數)將動態參數傳遞給MSBuild。

對於版本控制,我通常會自定義生成模板以生成Major.Minor.YYMM.DDRRRR格式的版本號,其中Major和Minor是在Build Definition中設置的參數。 YYMMDD是日期,RRR是我從TFS BuildNumber Revision組件中提取的(今天爲此構建版本構建的#號)。

我使用TFSVersion定製TFS建設活動從TFS Community Build Extensions更新我的所有程序集信息的,但如果你已經有版本的過程中你的MSBuild你可以生成生成模板所需的版本號,然後它作爲參數傳遞到您的MSBuild活動。

至於發佈文件回TFS你可以使用自定義的MSBuild任務(我確定某個地方存在,但我沒有一個方便的鏈接),你可以調用tfs命令行工具,或者您可以使用提供的工作流程活動在構建模板(而不是MSBuild)中執行此操作。

+0

因此,關於版本控制,我們可以讓tfs在包含內部版本號(如果可能的話)中包含內部版本號(或者TFS世界中的任何內容)的msbuild參數中進行推送?如何通過MSBuild將工件發佈回TFS? – Bronumski 2013-05-01 14:10:07

+0

您可以通過編輯構建定義將靜態參數推送到MSBuild。如果你想傳入動態參數(比如TFS Build#),你可能需要編輯Build Template。 TFS有一個BuildID(一個int)和一個BuildNumber,它是一種可以在Build Def中自定義的格式的字符串(默認情況下它是$(BuildDefinitionName)_ $(Date:yyyyMMdd)$(Rev :.r) – 2013-05-01 17:09:43

+0

我已經開始構建,由於公司完全鎖定構建環境導致無法訪問NuGet,我必須做一些定製。除此之外,它運行的構建。我需要做的是將NUnit結果推回到TFS,以便它可以顯示結果並在需要時構建失敗。 – Bronumski 2013-06-10 13:55:27