2014-01-21 67 views
7

我們正在使用TeamCity服務器和OctoPack構建多個部署環境的軟件包。問題在於觸手代理選擇包的最新版本,因此它是在所有環境中部署的相同(最新)包。以下是我們的設置摘要:如何讓Octopus部署在多個環境中選擇軟件包版本?

  • 環境DEV和STAGE;
  • 部署到DEV是從Git「dev」分支觸發的;
  • 部署到STAGE從Git「stage」分支觸發;
  • OctoPack被配置爲爲DEV構建配置生成軟件包MyProduct.1.0.0.dev-%build_counter%;
  • OctoPack配置爲生成包MyProduct.1.0.0。%build_counter%用於STAGE生成配置;
  • TeamCity配置爲通過其NuGet提要公開OctoPack人工製品(NuGet包);
  • Octopus項目被配置爲從TeamCity NuGet源中使用NuGet Id MyProduct部署包。

那麼會發生什麼呢,因爲DEV構建運行得更頻繁,它們有更大的%build_counter%,並且STAGE沒有機會獲得它自己的包的部署 - Octopus觸手優先與1.0包。 0.dev- *後綴。

這必須是相當普遍的情況,但我還沒有找到一個簡單的方法來解決它。

+0

我猜你的意思是「TeamCity的配置產生pacakges」而不是章魚?其他一些提示:爲STAGE和DEV(以及MASTER)使用不同的版本號,這將使得從長遠來看更容易維護。例如,在我們的開發版本中,版本號是0.0.0.x,在master中我們有1.0.0.x.我認爲最正確的版本是將dev設置爲2.0.0.x,並將master設置爲1.0.0.x,並且當dev準備好發佈併合併到master master時,版本會增加到2.0.0.x和dev到3.0.0.x.你可以把它想象成開發者是未來,而主人就是現在所掌握的東西。 –

回答

9

有一些零件在這裏沒有記錄:https://github.com/OctopusDeploy/Octopus-Tools。但是如果你看看https://github.com/OctopusDeploy/Octopus-Tools/blob/master/source/OctopusTools/Commands/CreateReleaseCommand.cs就可以弄清楚你可以做什麼。

我認爲這些工具是向後兼容的,但不是100%確定的。

當您使用我期望使用的octo工具時,可以設置version(也稱爲releasenumber現在)選項來指定版本號。如果您沒有指定其他任何內容,它將採用最新的軟件包,因此您想要執行的操作是設置應該用於該版本的packageversion(現在也稱爲defaultpackageversion)。

我認爲應該這樣做。如果沒有,你用什麼來創建該版本?

使用我們已經添加到環境路徑上的生成代理OCTO工具,當我們從我們的TeamCity使用什麼

例子:

create-release --server=%conf.OctoServerApi% --project=%conf.OctoProject% --version=%env.OctopusPackageVersion% --deployto=%conf.OctoDeployEnv% --packageversion=%env.OctoPackPackageVersion% --apiKey=%conf.OctoApiKey% --waitfordeployment %conf.OctoExtraParams% 

UPDATE:

2.0的文檔好多了:http://docs.octopusdeploy.com/pages/viewpage.action?pageId=360596

+0

謝謝Tomas,我會檢查你的建議,並檢查它是否解決我們的問題。 –

+0

是的,這個工作正常,正如你所建議的! –

+0

引用鏈接不再存在。 – jessehouwing

3

受Tomas Jansson的回答啓發,簡單地加入以下內容到附加的命令行參數OctopusDeploy:創建釋放構建步驟(TeamCity的V9)工作對我來說:

--packageversion=%build.number%