2014-03-19 68 views
10

我有幾個項目可以生成我發佈到內部服務器的NuGet包。我們使用semantic versioning,並在我們的Git存儲庫中使用標籤來控制版本號。如何僅爲標籤運行TeamCity構建?

我標記是這樣的:

git tag -a v1.0.0 -m "tagged" 

並且,TeamCity的生成過程中,我運行git describe --long,其產生這樣的輸出:

v1.0.0-0-ge9c047d 

在輸出第四個數字是標籤後的提交數量。這裏的0表示從標籤開始沒有提交。我使用前四個數字作爲版本號(順便說一句,整個字符串是AssemblyInformationalVersion)。

我有TeamCity軟件包併發布了一個NuGet軟件包,但這裏是粘滯的地方。我只想發佈標籤,從不提交標籤(因爲在這種情況下版本號是錯誤的,可能是非常錯誤的)。

我已經嘗試將VCS根目錄下的「分支規範」設置爲「+:refs/tags/*」,這會導致所有標籤都被構建,但TeamCity也堅持將「默認分支」構建爲好。如果我將「默認分支」設置爲不存在的東西,則會出現錯誤。

我曾經想過如果特定的構建不是標籤,但我不知道如何做到這一點,而不會失敗的構建,這是不是我想要的。

如何導致一個或多個構建步驟僅運行新標記而不是常規提交?

回答

9

如果您使用TeamCity 8.x,現在支持VCS branch triggers,這將允許您不從默認分支運行構建。

試試這個:

  1. 留在VCS根分支規範爲 「+:裁判/標籤/ *」
  2. 更改VCS建立觸發規則:

    +:*

    - :<默認>

這將過濾出觸發器的默認分支,您不需要取消構建。

+0

這很接近,但單擊「運行」按鈕仍會生成默認分支。 – Mark

+0

這種情況下的預期行爲是什麼? –

+0

好問題。我猜想* something *會運行,但在這種情況下,我不希望任何部署到NuGet服務器,也就是說,最終的構建步驟不會執行。理想情況下,構建不會*失敗*,只是不會導致部署任何工件。 – Mark

相關問題