【问题标题】:How exclude Deployment Group Target from Release on the fly如何从动态发布中排除部署组目标
【发布时间】:2023-03-10 04:18:01
【问题描述】:

我有一个包含 X 台服务器的部署组。
我已经创建并设置了我的发布管道以按预期工作。
当我运行它时,它会部署到我的部署组下的所有服务器。 (我确实按特定标签过滤,但这无关紧要)

我现在需要的是能够在部署期间动态过滤/排除服务器(例如:仅在第一台服务器上部署,其余部分保持不变)

类似下面的内容(截图取自支持此功能的 Octopus)

我正在尝试将一些发布定义从 Octopus 迁移到 Azure Pipelines,这阻碍了我。

【问题讨论】:

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline


【解决方案1】:

由于 Azure Pipelines 不支持此功能,我最终使用了一种解决方法:

  1. 创建一个包含我的 4 个服务器名称的管道变量。

  2. 在我的步骤中添加自定义条件
    'and(succeeded(), contains(variables['IncludedServers'],variables['Agent.MachineName']))

3. 如有必要,在创建发布时编辑变量

我确实想改进一些东西,比如 contains 表达式,这样当我有子字符串时就不会出现误报问题。

这并不完美,因为可能会出现拼写错误,但它可能是一个可以接受的解决方法。 希望微软会为此添加官方支持。

我在这里再次添加功能请求链接,如果你觉得这有用,请点赞。
Allow users to Exclude Deployment Targets from Release on the fly

【讨论】:

    【解决方案2】:

    如何在部署组服务器的子集上部署 Release

    通常,我们使用机器标签来限制部署到特定的目标服务器集。

    当部署组在Deployment group job 中使用时,您分配的标签允许您将部署限制到特定服务器。

    此外,您还可以在组织设置的部署池中禁用目标。

    更新

    这里是uservoice,关于允许用户即时从发布中排除部署目标。对此感兴趣的任何人都可以投票并跟踪它。

    【讨论】:

    • 谢谢 Hugh,我希望有一种更简单的方法,无需禁用和重新启用服务器。我们有数百台服务器,我想我不能把它卖给管理层。我的场景如下。对于我们的每个产品,负载均衡器后面都有 X 台具有相同标签的服务器,我希望能够先部署到其中的一个子集,然后运行测试,最后部署到其他人。
    • 根据您的场景,您只能在这些目标机器上添加单独的标签进行过滤。目前我们无法通过标签过滤后进行过滤。
    • 谢谢 Hugh,但我不认为我可以把它卖给管理层,因为要为每个产品的每个服务器创建单独的标签太复杂了。我会尝试寻找另一种选择或暂时坚持使用八达通。不过,我会在 developercommunity.visualstudio.com 上提出建议。再次感谢
    • @George Vovos 太棒了!我已经看到了您的票并为您投票。我将用户语音添加到答案中,因此对此感兴趣的任何人都可以投票并跟踪它。感谢您的反馈,这可能会改进我们的产品。希望这可以帮助。 :)
    • 休,我确实有一个涉及变量和条件任务的解决方法。它并不完美,但比我认为的禁用/重新启用服务器要好。我稍后会发布它作为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多