2013-09-23 175 views
1

我一直負責更新公司過時的構建過程。它全部在批處理和perl腳本中完成。目前的構建過程如下:TFS構建和本地構建

  1. 通過Web界面安排構建。
  2. 構建服務器將構建過程從隊列中取出。
  3. 構建服務器檢出TFS源代碼管理中的所有文件。
  4. 構建服務器運行一些代碼注入腳本,在構建之前修改源代碼。
  5. 構建服務器更新版本並簽署代碼。
  6. 構建服務器使用visual studio編譯項目。
  7. 完成後,構建服務器將輸出壓縮並將其放入網絡共享位置。

真正困難的部分是代碼注入腳本。它們是修改大量代碼的3個Perl腳本。它們的設計方式也非常依賴機器。 (所以我不能在沒有很多修改的情況下將它們放入構建過程中)

我的最終目標是能夠在本地開發機器上運行構建過程,並且還在TFS服務器上運行CI。

在我的搜索似乎沒有辦法模擬本地機器上的TFS生成。那麼我的唯一選擇是在我的cs.proj文件中使用pre/post-build命令行腳本嗎?還是有更好的方法在本地機器上執行復雜的構建,並在TFS上運行相同的構建?

我看過Using TFS build definitions on a local machine,但這對我來說似乎有點不好意思。如果沒有更好的解決方案,我想這不是一個可怕的解決方案。

回答

2

我曾試圖在過去自己做類似的事情。不幸的是,由於TFS構建工作流程需要的一切,所以沒有一個好方法可以解決這個問題。我發現基本上有兩種方法可以解決這個問題。

  1. 創建的MSBuild腳本,將服務器和本地
  2. 上運行創建本地和自定義活動服務器A的MSBuild腳本。

如果您有意或者要求您能夠在開發人員計算機和構建服務器上完全重現構建,那麼我會選擇#1。否則,我會去#2。第二種選擇是好的,因爲那樣你就可以在TFS工作流程中進行主要構建,爲你提供許多你需要的對象,並給你一個很好的地方來配置設置,而不必檢出/更改文件來改變構建如何發生。

對於任何一種方法,您最有可能必須修改Perl腳本以引入參數來說明系統之間必須執行的任何自定義操作。然後,您可以讓用戶將這些內容傳入,或者將它們默認放在MSBuild腳本中用於本地構建,並將它們設置爲TFS構建工作流程中的參數。因此,如果需要,可以輕鬆修改它們。不管採用哪種方法,唯一的好辦法就是標準化開發人員機器和構建服務器上需要設置的東西,以便您不必提供定製化功能。

如果你選擇第一個選項,那麼你可以使用Legacy構建配置TFS構建支持使用MSBuild腳本的一切,然後你可以在開發人員和構建服務器之間共享腳本,但如果有人意外更改這個腳本就會冒着破壞版本的風險。

+0

感謝您的回答。我認爲我的遊戲計劃將會是1和2的混合體。我將創建一套通用的MSBuild腳本,這些腳本是應用程序基本構建所需的。這些常用腳本將在服務器和本地上運行。這將允許開發人員在本地機器上構建和調試應用程序。然後我將擁有一些只能在服務器上運行以進行發佈類型任務的自定義活動。 (版本更新和代碼簽名等)除MSBuild腳本之外,還將運行這些腳本。 –