在Octopus部署中指定Nuget包版本

在Octopus部署中指定Nuget包版本,nuget,octopus-deploy,teamcity-9.0,Nuget,Octopus Deploy,Teamcity 9.0,基本上,我试图在octopus流程中的一个步骤上指定Nuget包版本 我们有一个相当简单的过程,我们使用Teamcity创建一个Nuget软件包并将其上传到octopus,然后我们要求octopus为给定的项目创建一个版本,这会启动octopus过程,安装另外两个Nuget软件包,然后我们刚刚上传的新软件包 我们的问题是其他两个包。我叫他们PackageA和PackageB。我想安装PackageA的1.0.0.0版和PackageB的2.0.0.0版,然后安装我刚刚上传的NewReleaseP

基本上,我试图在octopus流程中的一个步骤上指定Nuget包版本

我们有一个相当简单的过程,我们使用Teamcity创建一个Nuget软件包并将其上传到octopus,然后我们要求octopus为给定的项目创建一个版本,这会启动octopus过程,安装另外两个Nuget软件包,然后我们刚刚上传的新软件包

我们的问题是其他两个包。我叫他们PackageA和PackageB。我想安装PackageA的1.0.0.0版和PackageB的2.0.0.0版,然后安装我刚刚上传的NewReleasePackage的最新版本。部署Nuget包的基本步骤有一个“Nuget Package ID”字段,它帮助我识别PackageA和PackageB。但是,这不允许我指定一个版本。如果我有两个客户端,一个使用1.0.0.0版本的PackageA,另一个使用2.0.0.0版本的PackageA,那么我的八达通软件包存储库中将有两个版本的PackageA,我需要能够在步骤级别指定我要为给定的进程/客户端安装的软件包版本。然而,我似乎找不到这样做的方法。你能帮忙吗

谢谢


Will

我假设您正在使用octo.exe通过teamcity触发部署。尚不清楚的是部署过程是如何设置的。因此,您部署了三个软件包,其中一个只需要更新

您可以使用以下参数指定octo.exe调用中每个包的特定版本:

package=StepName:Version
你所寻找的东西可以在octo.exe调用中以昂贵的硬编码值来完成。如果包A和包B很少改变,这不是问题。但如果不经常进行更改,则必须更改octo.exe调用的参数

这些都在他们网站上的文档中。如果你有更多的细节,请提供它们,因为我的回答是高度推测性的

从理论上讲,我认为还有另一种选择:在与原始项目相同的项目组中,在自己的项目中分解频繁更改的NuGet包。这样,当您进行构建并且只部署一个要部署的NuGet包时,这是唯一需要做的更改

通过将项目一分为二,您将避免为octo.exe更改所有脚本参数——让我们面对现实,这是一个丑陋的黑客行为。从长远来看,它不会使您的部署自动化并最终为您自己制造麻烦。若包A和包B并没有改变,为什么要用一个经常改变的包来重新部署它们呢?这就是为什么我建议(在没有所有必要信息的情况下)将您的项目分为两个项目


我可以想出更多创造性的解决方案,但部署自动化的最佳实践/原则是越简单、越自主越好。当您深入了解部署包版本的细节,只为一个包部署最新版本,而坚持使用其他包的其他较旧静态版本时,是时候从头开始重新思考部署过程了。

Hi-osij2is,感谢您的回复。这不是我想要的。你看,在我们的过程中,我们有3个步骤。前两步安装具有特定版本的软件包A和B。然后在步骤3中,我们安装最近上传的软件包的最新版本。在每一个步骤中,我们都必须通过它的ID来识别我们想要安装的包。在我看来,版本也应该在这里指定(除非是空的,在这种情况下是最新的)。我会在一个系统中指定ID,在另一个系统中指定版本,这似乎很奇怪。这有意义吗?谢谢Will很抱歉我在这里说的是步骤和流程,我是在说Octopush中的步骤和流程,您实际完成了部署了吗?创建发布时,首先选择要部署到的环境,然后指定要部署的每个包的版本。这不是一个手工过程。我们希望它尽可能自动化。我可以通过createrelease命令指定teamcity中每个包的版本。然而,这感觉……不对。感觉不对,因为我用八达通(octopus)指定了nuget包ID(3个包中的每个包),但在teamcity中指定了这3个包的版本。感觉很奇怪。如果ID和版本都需要在TC中指定,那么在我的头脑中会更有意义。然而,在八达通中指定它对我来说最有意义。你明白我的意思吗?