团队城市中的章鱼部署未使用最新软件包

21

我在TeamCity上设置了一个构建步骤,按照这里的说明,自动发布部署到我们的测试服务器,但它没有使用在TeamCity中构建的最新nuget包。

使用情况:

Teamcity将创建版本号为1.0.0.9的nuget包,包中的所有dll都是正确的版本,Octopus中的发布已经部署了相同版本号,但Octopus使用的包是早期的包例如1.0.0.5。

我在构建步骤中指定了--force参数,所以它应该使用最新的包,但它没有。

如果我在Octopus中手动创建一个发布,并选择最新的包,那么就可以百分之百成功。

请问有人能告诉我是否有遗漏的地方。

提前感谢。


我已经设置它也查看packages文件夹,但仍然没有拉取最新的包。 - Captain0
你们团队城市配置的构建步骤顺序是什么? - Jason
你是否在等待部署完成后才继续执行其他步骤?也许你缺少了--waitfordeployment参数。我需要了解你在Team City中使用的步骤,才能提供更多帮助。 - Jason
有2个构建步骤,第一步构建软件包,第二步使用Octopus部署软件包。--waitfordeployment标志应该添加在哪里? - Captain0
6个回答

19
我认为你需要在TeamCity中创建两个构建配置,一个用于构建,另一个用于使用Octopus来部署。请参考这篇文章,其中有一小段话: 请注意,从您的构建创建的NuGet包直到构建完成后才会出现在TeamCity中。这意味着通常需要配置第二个构建配置,并在TeamCity中使用快照依赖项和构建触发器,在第一个构建配置完成后运行部署构建配置。 所以在我的情况下,我创建了2个构建配置,然后设置了从构建配置到部署配置的快照依赖项,同时还设置了一个触发器,在成功构建后启动部署。

1
同意。您可以在TeamCity构建期间发布构建工件,但这是在后台完成的,因此据我所知,您仍然不能依赖它。请参见http://confluence.jetbrains.com/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-PublishingArtifactswhiletheBuildisStillinProgress。 - piers7
是的,我在发布这个答案后也看到了TC 8中使用元运行器的类似内容。除非绝对必要或者您试图保持在免费许可下允许的20个构建配置以下,否则我仍然会选择2个链接的构建配置 :) - Nate Rickard
我已经搜索了很多,这是我看到的最好的答案,但它不是似乎有些错误吗?我不喜欢为每个项目额外创建一个项目以进行部署。 - seFausto
有点不太优化,是的。你可能想研究一下metarunner方法,据说可以在单个构建配置中完成工件发布 - 抱歉,我没有链接,但我记得在某个地方看到过。 我已经将构建+部署配置分组到它们自己的子项目中,以保持UI界面整洁,对我们的需求似乎足够好了。 - Nate Rickard
7
Octopus 2.1中推送到内置仓库可以解决此问题 - 在TC构建中使用NuGet Publish,然后使用Octopus步骤:http://docs.octopusdeploy.com/display/OD/Package+repositories - Nicholas Blumhardt
显示剩余2条评论

3

看起来,--force 参数只是强制重新安装已经安装的软件包。你是否使用了 --packageversion 参数?


我无法使用packageversion,因为正在部署的网站有多个项目,而这些项目的包版本可能并不相同。 - Captain0
嗯,是否有可能给它们都提供相同的软件包版本?如果TeamCity正在创建NuGet软件包,您可以在创建nuspec文件时使用TC构建号,以便单个构建的所有软件包编号保持一致。 - ryan.rousseau

1

我们的组织使用Jenkins CI。我们使用唯一的构建号作为我们的软件包版本,并使用--packageversion参数部署该特定软件包版本。

在需要部署多个服务的情况下,我们有一个上游作业/主要作业,提供唯一的构建号。

我想你可以用TeamCity做同样的事情。

主作业(唯一的构建号)使用参数(唯一构建号)调用作业A和作业B。作业A和作业B从主作业生成版本。作业A和作业B完成后发布各自的版本。


1
这可能会有几个原因。

请检查。

http://octopusdeploy.com/documentation/integration/teamcity

您没有提及如何在Teamcity中使用Octopus获取信息源。我建议从那里开始。
接下来,我会使用teamcity操作进行部署。您问:“--waitfordeployment标志应该添加在哪里”,有一个复选框可以确保在操作继续之前部署已经成功。

好的,标志已经检查过了,链接没有提供任何我已经拥有的信息。但是部署仍然存在相同的问题。 - Captain0
那么这是代理的密钥或权限问题吗?代理机器在部署后是否可以访问NuGet包? - Jason

0
在TeamCity中,我使用Octo Push Packages步骤,并在“Additional Parameters”字段中指定--defaultpackgeversion {VERSION}参数。
这将强制Octo使用特定版本的软件包,而不仅仅是选择“最新版本”。

0

问题可能有更多的原因。

  1. 要查看Octopus的问题,请转到配置 ->诊断enter image description here

  2. 另一个常见问题是在部署步骤中使用软件包名称#{variable}

    目前不支持此功能,软件包名称应手动设置,例如MyWebSiteMyWindowsService。请参见UserVoice以获取此功能。 enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接