2011-10-19 70 views
2

我正在使用TeamCity 6.5.4,並且我需要爲同一個部署包創建3個構建配置。我想在所有三種構建配置中保留版本號,並且能夠使用該編號來修改程序集版本,標記vcs,版本nuspec文件等。在構建步驟和構建配置中保留版本號

以下是配置和期望的版本號:

Configuration  | Version 
-------------------|--------- 
CI/Nightly Build | 1.1.* 
Minor Release  | 1.*.0 
Major Release  | *.0.0 

似乎TeamCity爲每個配置使用單獨的構建增量器。這意味着每次我們發佈主要或次要版本時,我都必須手動更新所有後續配置中的持久值(1)。我是一名程序員,我很懶。我想要一個按鈕來爲我做所有事情。

我見過通過依賴快照配置的構建步驟來保持內部版本號的示例,但只適用於相同的配置。

Autoincrementer插件每碰到號碼時會引用該ID。對於不斷變化的數字(*),這很好,但對於引用持久值(1)不太好。

是否有TeamCity的一種方式,無論是本地或通過插件,讓我讀取和寫入該版本的文件或變量,它可以在構建配置被保留?

回答

1

感謝您的建議。我選擇編寫一套自定義目標以與我的MSBuild腳本一起使用,該腳本在遠程xml「清單」文件中維護程序集元數據。當創建一個新的TeamCity項目時,我的構建腳本調用一個Init目標,該目標從未填充的模板創建一個新的清單文件。

<Copy SourceFiles="@(ManifestTemplate)" DestinationFiles="@(ManifestTemplate->'$(ManifestFile)')" Condition="!Exists('$(ManifestFile)')" /> 

我正在使用MSBuild Extentions包從清單文件中讀取版本信息等屬性。

<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElementText" File="$(ManifestFile)" XPath="/Package/Version/Major"> 
    <Output PropertyName="PackageVersionMajor" TaskParameter="Value"/> 
</MSBuild.ExtensionPack.Xml.XmlFile> 

我有我的TeamCity構建配置分離CI,測試,次要版本和主要版本與不同的事件觸發每個。從我的項目構建腳本相應的目標,我添加了一個新的目標,以DependsOnTargets屬性來調用自定義目標更新相應的版本號,並將其保存到清單文件。

<Target Name="Test" DependsOnTargets="IntializeBuildProject;Build-UpdateVersion-Build"> 
<MSBuild Projects="$(SolutionFile)" Targets="Rebuild" Properties="Configuration=$(Configuration)" /> 
<TeamCitySetBuildNumber BuildNumber="$(PackageVersion)" /> 

在自定義的目標代碼來處理的版本更新:

<MSBuild.ExtensionPack.Science.Maths TaskAction="Add" Numbers="$(PackageVersionBuild);1"> 
    <Output PropertyName="PackageVersionBuild" TaskParameter="Result"/> 
</MSBuild.ExtensionPack.Science.Maths> 
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="UpdateElement" File="$(ManifestFile)" XPath="/Package/Version/Build" InnerText="$(PackageVersionBuild)"/> 

該文件處理的版本,從而忽略了TeamCity的版本號等元數據的持久性。由於XML元數據文件是集中式的,我可以使用這些值填充我的Nuspec,AssemblyInfo和WiX安裝程序元數據,並通過服務消息將版本和其他相關信息傳回給TeamCity。

我添加了一個簡單的MVC Web界面,允許我的團隊遠程編輯文件內容,如果包詳細​​信息發生變化。現在我們只有一個地方可以更新版權信息和給定構建項目的任何其他元數據。我也可以讓非開發人員訪問MVC網站來更新品牌信息,而不允許他們訪問我的TeamCity構建配置。

除了用於向TeamCity中繼版本的服務消息外,這裏與TeamCity結合的非常少。我喜歡將自定義目標中的功能和從TeamCity中刪除的構建腳本轉移到另一個構建管理解決方案。出於這個原因,我不打算花時間去構建一個TeamCity插件,但可能會有一個博客系列即將推出。

我很樂意爲任何感興趣的人提供更多的代碼和進一步的解釋。

3

可以參考使用dep.btx.build.number依賴性的(僞影/快照)構的版本號,其中btx是後者的BT ID。一旦你的版本號,通過內部版本號到腳本的配置下運行,在分析腳本中的版本號,從腳本發送到service messages向TeamCity的設置你想要的方式的版本號。在構建步驟中,將腳本解析和設置編號作爲腳本/第一步中的第一步。

+0

感謝您的回覆。這可以在具有相關工件的相同構建配置中正常工作。我在這裏有三種獨立的構建配置,它們有三套不同的步驟。我需要能夠跨配置持久保留版本號,而不是構建步驟。 –

+0

爲了進一步闡明,CI構建將發生在vcs commit上,並且應該推出版本2.19.123。次要版本構建將手動運行,並應該刪除版本2.20.0。主要發佈版本也將手動運行,並且應該推出版本3.0.0。爲了實現所有這些,必須有一箇中心位置,該版本可以存儲並在後續構建中引用。 –

+0

@DaveBaxter - 你還沒有明白我的答案。我不是在談論相同的構建配置。我正在通過配置進行交談。請嘗試再次閱讀。 – manojlds

0

是的,你可以創建一個插件來做到這一點。您可以使用我的自動增量編號(跨配置)插件並對其進行修改以適應您的需求。內部版本號將被保存在一個文本文件中,該文件可以從TeamCity的管理屏幕進行配置。

http://github.com/ornatwork/tc_plugins/tree/master/unique

你可以打我輸入如何,如果你需要改變它。

+0

我只是在看寫這樣的插件來處理這個問題。我**知道**我不可能是唯一需要這種設置的人。讓我通讀已有的代碼,然後查看可能需要爲我的環境所做的更改。謝謝! –

相關問題