2012-02-07 59 views
4

我正在使用SVN + CruiseControl.NET + MSBuild構建.NET項目。這些是技術細節,以便您瞭解環境和術語,但問題本質上是更普遍的。用於持續集成和自動版本標記的工作流:.NET項目+ CC.NET + SVN + MSBuild

現在,我的CI工作流程非常簡單:

  1. CC.NET檢測到新的修訂在SVN檢測項目主幹
  2. CC.NET工作副本從SVN更新
  3. 的MSBuild是在樹幹針對.proj文件推出
  4. 單元測試運行
  5. 如果成功的話,項目將被複制/部署

在步驟3中,我想將版本號「戳記」到版本上;在我的情況下,在AssemblyInfo.cs文件中,很可能使用類似msbuildtasks中的AssemblyInfo任務。另外,我希望能夠在該特定版本號上重複該構建。現在,我在想,可能在第4步之後,我需要提交/使用加蓋的AssemblyInfo.cs將其重新標記爲SVN項目,但是我很難考慮以最直接的方式執行此操作。

如果我正在將帶有蓋章的AssemblyInfo.cs文件的項目提交回存儲庫,那麼它不能到達主幹,因爲這會觸發另一個自動構建:無限循環。所以,我會假設它需要去一個新的標籤。那麼我會標記修訂版本,將工作副本切換到標記,提交,然後切換回主幹。這是常用的方式嗎?

還是我過分複雜呢?我是否應該擔心將此版本提交回購,還是隻是將構建的項目壓縮並存儲在文件系統中的結構化位置?

回答

1

您不需要用於版本標記的msbuild任務。 CCNET會爲你做這件事。 msbuildtasks樣式任務僅適用於TFS,但不包含在內。

沒有理由擔心檢查assemblyinfo文件。只要有一個標籤(或任何svn稱他們),你都很好。

至於重新運行構建的確切副本,我會說只是將它們壓縮並存儲實際使用的那些。您不需要存儲每個版本。

我一直在做的是在每次檢查時運行的CI構建以及僅部署手動運行的發佈版本。 CI構建根本沒有獲得版本號,也沒有存儲在任何地方。版本化版本獲取版本號並保存。

+0

什麼你在做什麼來拯救他們?所描述的ZIP和商店? – 2012-02-07 21:01:37

+0

我們只是住在一個解壓縮的文件夾中,但是真正漂浮在你的船上。 – BNL 2012-02-07 21:04:07

+0

Gotcha。我可以假設這個文件夾被複製出來作爲發佈構建作業的一部分嗎? – 2012-02-07 21:05:28

3

在我目前和以前的公司。我們在構建期間戳記/修改assemblyInfo.cs,並在每次成功構建後提交assemblyInfo文件。

爲了防止無限循環;我們排除了在ccnet配置中觸發構建的asssemblyInfo.cs。

缺點:無論何時我們點擊強制按鈕,新版本都會被提交回幹線存儲庫,即使沒有修改源代碼。

我仍然要版本的程序集信息更好的方法研究:)

添加2個小時後:

一些經過研究;而不是將assemblyInfo提交回主幹;有些人創建工作目錄(與修改後的程序集信息) CCNET的標籤不支持這一機制:SVN TagOnSuccess working copy and updated AssemblyInfo.cs

傑里米米勒使用這種方法http://codebetter.com/jeremymiller/2007/12/06/do-you-really-know-where-that-code-has-been/

缺點:會有很多的標籤

+0

這是一個powershell腳本,用於動態更改AssemblyInfo.cs屬性。 https://www.jokecamp.com/blog/powerhsell-script-dynamically-set-dotnet-assebmly-versions/ – kampsj 2017-03-18 17:40:54