如何在发布管道中 deactivate/Skip 阶段(非 YAML)但它的传递(继续下一阶段)
How to deactivate/Skip stage in release pipeline(non YAML) but its passthrough(continues for next stages)
据我了解,在 YAML 管道中您可以 select 'Stages to Run' 因此基本上允许出于任何原因完全跳过阶段。但是,我在 GUI 发布管道中看不到相同的功能。我只看到选项 'Manual Only' - 'Manual Only' 在我有 dev > Test > Prod 并且我想跳过 Test 但保持发布管道结构完整的场景中可用吗?这方面的最佳做法是什么?到目前为止,我只能看到在 YAML 中同时构建和发布的选项。
谢谢。
确实有很多方法可以解决这个问题,但我要指出的主要方法是:
#1 具有多个 stages/triggers
的单一发布管道
您认为手动部署可以在这里使用各个阶段并进行分支是正确的。 (请参阅下面的屏幕截图 link)
Release Pipeline with manual deployment paths
在这种情况下,一旦有新的 Release 就会部署 DEV,然后您可以手动指定希望其余部署进行的路径(直接到 Prod,或 Test to Prod)。
#2 预批准发布管道
这可能比手动部署更简洁一些,并且具有能够指定特定用户或组的优点。 (Link 到下面的屏幕截图)
Release Pipeline with Pre-Approval condition
#3 基于构建标签执行的独立发布管道
测试后,我确认您能够根据构建管道中指定的标记触发不同的版本。我相信你可以对拉取请求做同样的事情
基于此标记,它可以通过持续部署筛选过程确定将哪个管道发布到 运行。
下面的屏幕截图和步骤是完成这项工作所需的步骤:
- 创建构建管道,其中包括成功构建所需的任何内容,以及将用于指定构建标记名称的管道变量(我的是 ProdOnly_TestThenProd),以及将使用的 Az Powershell 任务在执行期间在构建上设置构建标记。这是内联脚本的代码:
Write-Host "##vso[build.addbuildtag]$env:ProdOnly_TestThenProd"
参考这个gif:Build Pipeline
- 创建两个发布管道,一个用于 DEV>PROD,另一个用于 DEV>TEST>PROD。创建后,在构建时启用持续部署并根据您的构建管道 branch/tag 集添加 Branch/Tag 过滤器。参考这个截图:Release Pipelines
- 运行 手动构建管道,这将允许您在 运行 时设置管道变量的值,这允许您指定要发布的管道 运行 在一次性情况下,否则,构建管道可以 运行 使用持续集成过程中的任何当前变量值。请参考此 gif 图像:Build Pipeline execution and Continuous Deployment
我喜欢这个 #3 选项,因为它允许你有 CI/CD 循环,而且如果你需要 运行 一次性管道,可能直接发布到 Prod 或其他阶段,然后它使您可以灵活地这样做而无需大量的手动工作。希望这能回答您的问题。
如果您使用具有多阶段的 yaml 管道,“Stages to 运行”功能允许您跳过管道中的几个阶段,如下所述:Skipping stages in a YAML pipeline.
如果您想在经典发布管道中实现此功能,请按照以下步骤操作。
- 我的发布管道有 3 个阶段:Dev->Test->Prod,如下所示。
- 在 Variables 部分下为 Test 范围设置一个“RunTest”变量,并启用“可在发布时设置”选项,这样我们就可以在运行发布新版本时更改其值。
- 然后设置自定义条件:eq(variables['RunTest'], 'true') for Agent job在测试阶段,如下。
- 因此,如果我们想在新版本中跳过Test阶段,只需将其值更改为false,如下所示。
据我了解,在 YAML 管道中您可以 select 'Stages to Run' 因此基本上允许出于任何原因完全跳过阶段。但是,我在 GUI 发布管道中看不到相同的功能。我只看到选项 'Manual Only' - 'Manual Only' 在我有 dev > Test > Prod 并且我想跳过 Test 但保持发布管道结构完整的场景中可用吗?这方面的最佳做法是什么?到目前为止,我只能看到在 YAML 中同时构建和发布的选项。
谢谢。
确实有很多方法可以解决这个问题,但我要指出的主要方法是:
#1 具有多个 stages/triggers
的单一发布管道您认为手动部署可以在这里使用各个阶段并进行分支是正确的。 (请参阅下面的屏幕截图 link)
Release Pipeline with manual deployment paths
在这种情况下,一旦有新的 Release 就会部署 DEV,然后您可以手动指定希望其余部署进行的路径(直接到 Prod,或 Test to Prod)。
#2 预批准发布管道
这可能比手动部署更简洁一些,并且具有能够指定特定用户或组的优点。 (Link 到下面的屏幕截图)
Release Pipeline with Pre-Approval condition
#3 基于构建标签执行的独立发布管道
测试后,我确认您能够根据构建管道中指定的标记触发不同的版本。我相信你可以对拉取请求做同样的事情
基于此标记,它可以通过持续部署筛选过程确定将哪个管道发布到 运行。
下面的屏幕截图和步骤是完成这项工作所需的步骤:
- 创建构建管道,其中包括成功构建所需的任何内容,以及将用于指定构建标记名称的管道变量(我的是 ProdOnly_TestThenProd),以及将使用的 Az Powershell 任务在执行期间在构建上设置构建标记。这是内联脚本的代码:
Write-Host "##vso[build.addbuildtag]$env:ProdOnly_TestThenProd"
参考这个gif:Build Pipeline - 创建两个发布管道,一个用于 DEV>PROD,另一个用于 DEV>TEST>PROD。创建后,在构建时启用持续部署并根据您的构建管道 branch/tag 集添加 Branch/Tag 过滤器。参考这个截图:Release Pipelines
- 运行 手动构建管道,这将允许您在 运行 时设置管道变量的值,这允许您指定要发布的管道 运行 在一次性情况下,否则,构建管道可以 运行 使用持续集成过程中的任何当前变量值。请参考此 gif 图像:Build Pipeline execution and Continuous Deployment
我喜欢这个 #3 选项,因为它允许你有 CI/CD 循环,而且如果你需要 运行 一次性管道,可能直接发布到 Prod 或其他阶段,然后它使您可以灵活地这样做而无需大量的手动工作。希望这能回答您的问题。
如果您使用具有多阶段的 yaml 管道,“Stages to 运行”功能允许您跳过管道中的几个阶段,如下所述:Skipping stages in a YAML pipeline.
如果您想在经典发布管道中实现此功能,请按照以下步骤操作。
- 我的发布管道有 3 个阶段:Dev->Test->Prod,如下所示。
- 在 Variables 部分下为 Test 范围设置一个“RunTest”变量,并启用“可在发布时设置”选项,这样我们就可以在运行发布新版本时更改其值。
- 然后设置自定义条件:eq(variables['RunTest'], 'true') for Agent job在测试阶段,如下。
- 因此,如果我们想在新版本中跳过Test阶段,只需将其值更改为false,如下所示。