我想看看是否有办法检查构建定义,如果另一个构建队列为分支排队。
对于上下文 - 我有一个Octopus Deploy步骤作为构建定义的最后一步。要部署应用程序 - 大约需要10分钟。我们的构建过程也是大约10分钟(这是一个很大的应用程序)。
当一个团队处理一个功能时,我们最终会排队等待每个签入和构建完成的2个和3个构建。
我想要做的是只有在没有为同一分支排队的其他构建时才运行部署任务。这将确保我们不会浪费30分钟的不必要部署,只会部署最新的代码。
答案 0 :(得分:1)
您使用什么类型的构建? XAML构建或Vnext构建。您似乎在构建定义中使用CI触发器,因此每次签入时都会触发构建。
VNext build:
您可以选择批量更改复选框。根据{{3}},
如果选择此选项,则在构建运行时,系统会等待构建完成,然后对尚未构建的所有更改的另一个构建进行排队。
当你有大量的构建排队时,这会将更改组合到一个构建中。
XAML构建:
在构建定义中,您可以使用滚动构建触发器。 具有与上述批量更改相同的功能。
注意:强>
如果有排队的构建定义的构建,您也可以使用This来获取。
Http method: Get
http://servername:8080/tfs/DefaultCollection/TeamprojectName/_apis/build/builds?definitions=10&statusFilter=notStarted&api-version=2.0
答案 1 :(得分:0)
最终比我想象的要容易 - 但不完全是我在问题中尝试做的事情。
TFS和VSTS的Octopus创建发布任务有一个“显示部署进度”选项。检查这会导致构建定义等待 - 通过Octo.exe工具定期从Octopus接收反馈。
这部署实际上是几个部署(15个独立项目)的包装器 - 因此需要很长时间。
取消选中此选项会导致TFS不等待 - 但将create release / deploy命令发送到Octopus。
现在这并没有解决我最初的问题 - 但是Tingting0929-MFST确实帮助了我,因为我探索了使用TFS Rest API。我写了一个PS脚本,有效地完成了我的要求 - 如果有另一个构建排队等待同一个分支,则不进行部署。我得到了它 - 但它引入了一个不同的问题,因为TFS和相关变更集/工作项的发布说明在两个版本之间被吞没。
换句话说,如果三张签到相当接近的分离,最后一张将被部署。八达通只显示上次部署的发行说明,而不是前两个。
对于在功能分支设置中使用Octopus Deploy的人员(一个项目部署到多个渠道) - 这是一个让您获得每个渠道(分支)的持续部署的选项。