2011-07-15 30 views
7

我們目前使用Subversion我們的發佈管理,並標記所有我們發佈的(既QA和我們的生產服務器)。但是,我們希望創建一個反映我們最新版本的發佈目錄。通過這種方式,我們可以讓TeamCity始終從相同的文件夾中進行連續編譯。另外,如果有人需要對生產進行快速錯誤修復,他們不會意外地將錯誤修改爲錯誤的分支。顛覆發佈管理與TeamCity的

例如,下面是增加了我們目前的結構與「釋放」文件夾。是否有一種簡單的方法可以將標籤分支每次移動到「發佈」,或者甚至將「發佈」鏈接到最新的release_ *版本?

Our subversion folder structure

澄清

這裏是我們的構建/釋放過程目前是如何工作的一個例子:

  • 今天,我發佈一個版本我們的Web應用程序,以QA的TeamCity後成功建立它。當這樣做,我分支/標記它
  • 明天以後,開發人員繼續在主幹進行更新。在下一個QA版本發佈之前,這些內容不會被推送到QA
  • 週三,我們的QA團隊通知我們他們發現了一個錯誤。我們對QA分支進行錯誤修復,將更改合併回主幹,並將更新的QA分支推回QA。問題1:TeamCity的不再是我們的工作,因爲我們是在一個#'d QA分支
  • 上週五,QA批准生產的釋放,所以我們發佈和分支/標籤
  • 週一,客戶端需要對生產進行小改動的問題。我們在發佈分支中進行更改併合並回主幹。問題2:再一次,我們正在做的改變,而不TeamCity的幫助我們
+0

+1這已經變成了一個很好的問題。我不確定我們的系統是否可以應對上面列出的問題,並且我們將與在9月份的 –

回答

4

我(做)採取略有不同的方法來此。源控制管理主要是爲了管理源並將其視爲跟蹤或暗示發佈可能會使生活有點棘手的手段。這是您的持續集成環境的真正目的,它比SVN所做的要好得多。

我使用的TeamCity作爲查明兩個路徑和版本號從SVN拉的裝置。在構建運行時很容易定義這一點,並且任何發佈到製作都始終謹慎(即仔細檢查路徑和修訂版)。在絕對最壞的情況下,如果你把它搞砸了,你總是可以用修改後的參數重新運行構建。

你真的不想直接將代碼更改爲「發佈」文件夾 - 如果主流開發或分支機構適用於需要調整早期版本的主幹,則這是幹線的用途。這是擊敗SVN提交做一些不是它的核心力量!在這方面,您可能會發現The 10 commandments of good source control management中的一些提示很有用。

+0

我有點不清楚你將如何使用TeamCity。我們的網絡產品有10個支持EXE的工具,每個工具都由TeamCity在每次簽到時進行構建和檢查。然而,一旦我們開始分支/標記,我將如何設置TeamCity來處理這個問題,除非分支/標籤總是被命名爲相同的? 關於您在發佈文件夾中進行更改的評論,請參閱我在原始問題中的「澄清」...,其中介紹了我們當前的構建過程。 感謝您的洞察! –

+1

忽略代碼單元的類型或數量(即10個EXE)和目的(QA或生產),我們真的只是談論TeamCity從SVN中的不同路徑提取代碼的能力,對吧?該路徑通常是上述場景中的標記或分支,因此您的問題變爲「我如何從相同VCS根目錄下的不同路徑拉出?」。查看「配置參數使用示例」,其中介紹瞭如何參數化檢出路徑:http://troy.hn/q3OQLu –

+0

首選方法實際上是對SVN的更改,以便單個標籤始終指向最新版本。這樣,任何對版本的更改都會被TeamCity自動檢查(而不是需要爲每個版本更改TeamCity)。我只是不知道該怎麼做。 –

0

您可以輕鬆地腳本此建立完成,這樣以後你可以在文件夾的文件或內容複製到release文件夾。在執行此操作之前,您甚至可以刪除發佈文件夾的內容。所以是的,因爲svn中的一個分支或標籤是一個複製操作,所以你可以輕鬆地做到這一點。

0

對於每一個項目,我們有一個包含,那麼,最新的版本(通常只是二進制文件)一個Latest文件夾。

雖然我們使用自定義的MSBuild腳本來實現這一e.g做一個SVN上的內容刪除,然後一個SVN複製到文件夾的最新這是持續集成是非常有用的。

+0

中描述的完全相同的位置嗯......我們正在尋找的只是最新的版本,並且能夠更新發布任何錯誤修復(而不是對單獨標記的發佈進行更改)。 –

+0

@Jess好像誤解了你的問題。你多久製作一次發行版?每日/每週/手動?另外,您的發佈文件夾中有什麼 - 主幹的副本? –

+0

我們還沒有使用發佈版本......我希望創建一個文件夾,以便我們總能發佈一個版本。這樣,TeamCity總是在構建該文件夾,並且如果開發人員需要進行快速生產錯誤修復,則可以在該文件夾中執行此操作。 –

0

您可以使用svn:external屬性將名爲釋放點的文件夾指向不同的標記。見svn:external

svn propset svn:externals 'release http://my_repo/tags/latest_tag' . 

每次發佈新標籤時,您都必須更新屬性值以指向最新的標籤。

+0

您是否已將其集成到您的TeamCity構建配置中?我不明白這應該如何工作。我認爲你將不得不將標準建立在你自己的基礎上。 – powerMicha

+0

我還沒有用過TeamCity,但我已經和哈德森一起使用過。我對問題的閱讀是關於如何將一個靜態命名的位置與subversion中的實際更改版本鏈接到存儲庫中的其他位置。 – bstick12

+0

好的。如果你在編譯後自動執行'svn'語句,這是真的。這也可以由TeamCity完成。我認爲增加另一個構建配置,指向'release'應該有助於解決這個問題 – powerMicha