如何让Octopus部署在多个环境中选择包版本?

时间:2014-01-21 13:45:01

标签: deployment teamcity nuget octopus-deploy

我们正在使用TeamCity服务器和OctoPack为多个部署环境构建软件包。问题是触手代理选择最新的数字版本的软件包,因此它是在所有环境中部署的相同(最新)软件包。以下是我们设置的摘要:

  • 环境DEV和STAGE;
  • 从Git“dev”分支触发部署到DEV;
  • 从Git“stage”分支触发部署到STAGE;
  • OctoPack配置为为DEV构建配置生成包MyProduct.1.0.0.dev-%build_counter%;
  • OctoPack配置为为STAGE构建配置生成包MyProduct.1.0.0。%build_counter%;
  • TeamCity配置为通过其NuGet提要公开OctoPack人工制品(NuGet包);
  • Octopus项目配置为使用TeamCity NuGet feed中的NuGet Id MyProduct部署包。

所以会发生的事情是,由于DEV构建运行得更频繁,它们的%build_counter%更大,而STAGE没有机会获得自己的软件包部署 - Octopus tentacle优先使用1.0.0.dev软件包 - *后缀。

这一定是相当常见的情况,但我还没有找到解决问题的简单方法。

2 个答案:

答案 0 :(得分: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%

<强>更新

2.0的文档要好得多:http://docs.octopusdeploy.com/pages/viewpage.action?pageId=360596

答案 1 :(得分:4)

受Tomas Jansson的回答启发,只需将以下内容添加到 OctopusDeploy:创建版本构建步骤(TeamCity v9)中的其他命令行参数我:

--packageversion=%build.number%