在执行构建任务之前确定另一个构建是否在 TFS 中排队
Determine if another build is queued in TFS before executing build task
我们运行一个环境被多个功能分成分支。这些分支被配置为 Octopus Deploy 中的一个通道。
我想看看是否有办法在另一个构建排队等待分支时签入构建定义。
对于上下文 - 我将 Octopus 部署步骤作为构建定义中的最后一步。部署应用程序 - 大约需要 10 分钟。我们的构建过程也大约需要 10 分钟(这是一个大型应用程序)。
当一个团队在一个功能上工作时签入 - 我们最终有 2 个和 3 个构建排队等待每次签入和构建完成。
我想做的是仅当没有另一个构建排队等待同一分支时才执行部署任务 运行。这将确保我们不会浪费 30 分钟进行不必要的部署,而只会部署最新的代码。
您使用什么类型的构建? XAML 构建或 Vnext 构建。您似乎在构建定义中使用了 CI 触发器,因此每次签入时它都会触发构建。
V下一次构建:
您可以 select 批量更改 复选框。根据this document,
If you select this option, when a build is running, the system waits until the build is completed and then queues another build of all changes that have not yet been built.
当您有很多构建排队时,这会将更改合并到一个构建中。
XAML 构建:
在构建定义中,您可以使用滚动构建 触发器。 This和上面提到的批量修改功能一样
注:
您还可以使用 this REST API 来获取是否有排队的构建定义的构建。
Http method: Get
http://servername:8080/tfs/DefaultCollection/TeamprojectName/_apis/build/builds?definitions=10&statusFilter=notStarted&api-version=2.0
最终比我想象的要容易 - 但与我在问题中尝试做的不完全一样。
TFS 和 VSTS 的 Octopus 创建发布任务有一个选项 "Show Deployment Progress"。检查此项会导致构建定义等待 - 通过 Octo.exe 工具定期从 Octopus 接收反馈。
此部署实际上是多个部署(15 个独立项目)的包装器 - 因此需要很长时间。
取消选中此选项会导致 TFS 不等待 - 而是将创建发布/部署命令发送到 Octopus。
现在这并没有解决我最初的问题 - 但 Tingting0929-MFST 确实帮助了我,因为我探索了使用 TFS Rest API。我写了一个 PS 脚本,有效地完成了我的要求 - 如果有另一个构建排队等待同一个分支,则不部署。我让它工作了 - 但它引入了一个不同的问题,因为 TFS 的发行说明和相关的变更集/工作项在发行之间被吞没了。
换句话说,如果三个签入间隔相当近,最后一个将被部署。 Octopus 将只显示最后一次部署的发行说明,而不是前两个。
对于那些在功能分支设置(一个项目部署到多个渠道)中使用 Octopus Deploy 的用户 - 这是一个让您为每个渠道(分支)持续部署的选项。
我们运行一个环境被多个功能分成分支。这些分支被配置为 Octopus Deploy 中的一个通道。
我想看看是否有办法在另一个构建排队等待分支时签入构建定义。
对于上下文 - 我将 Octopus 部署步骤作为构建定义中的最后一步。部署应用程序 - 大约需要 10 分钟。我们的构建过程也大约需要 10 分钟(这是一个大型应用程序)。
当一个团队在一个功能上工作时签入 - 我们最终有 2 个和 3 个构建排队等待每次签入和构建完成。
我想做的是仅当没有另一个构建排队等待同一分支时才执行部署任务 运行。这将确保我们不会浪费 30 分钟进行不必要的部署,而只会部署最新的代码。
您使用什么类型的构建? XAML 构建或 Vnext 构建。您似乎在构建定义中使用了 CI 触发器,因此每次签入时它都会触发构建。
V下一次构建:
您可以 select 批量更改 复选框。根据this document,
If you select this option, when a build is running, the system waits until the build is completed and then queues another build of all changes that have not yet been built.
当您有很多构建排队时,这会将更改合并到一个构建中。
XAML 构建:
在构建定义中,您可以使用滚动构建 触发器。 This和上面提到的批量修改功能一样
注:
您还可以使用 this REST API 来获取是否有排队的构建定义的构建。
Http method: Get
http://servername:8080/tfs/DefaultCollection/TeamprojectName/_apis/build/builds?definitions=10&statusFilter=notStarted&api-version=2.0
最终比我想象的要容易 - 但与我在问题中尝试做的不完全一样。
TFS 和 VSTS 的 Octopus 创建发布任务有一个选项 "Show Deployment Progress"。检查此项会导致构建定义等待 - 通过 Octo.exe 工具定期从 Octopus 接收反馈。
此部署实际上是多个部署(15 个独立项目)的包装器 - 因此需要很长时间。
取消选中此选项会导致 TFS 不等待 - 而是将创建发布/部署命令发送到 Octopus。
现在这并没有解决我最初的问题 - 但 Tingting0929-MFST 确实帮助了我,因为我探索了使用 TFS Rest API。我写了一个 PS 脚本,有效地完成了我的要求 - 如果有另一个构建排队等待同一个分支,则不部署。我让它工作了 - 但它引入了一个不同的问题,因为 TFS 的发行说明和相关的变更集/工作项在发行之间被吞没了。
换句话说,如果三个签入间隔相当近,最后一个将被部署。 Octopus 将只显示最后一次部署的发行说明,而不是前两个。
对于那些在功能分支设置(一个项目部署到多个渠道)中使用 Octopus Deploy 的用户 - 这是一个让您为每个渠道(分支)持续部署的选项。