【问题标题】:How to manually run a skipped stage in an Azure Devops yaml pipeline?如何在 Azure Devops yaml 管道中手动运行跳过的阶段?
【发布时间】:2021-08-05 10:42:25
【问题描述】:

在 Azure Devops 管道中,如果某个阶段被跳过,是否可以手动触发它?

我们有一个如下所示的管道...

如果Staging 失败(当前行为),我们不希望TrainingProduction 阶段自动运行,但我们希望能够手动运行TrainingProduction 阶段如果它被跳过。

这可能吗?

这种情况的用例是,如果某个特定的测试失败并且没有人可以修复它。我们可能仍希望做出部署到生产环境的业务决策。

目前,您必须签入修复或取消测试的更改并重新运行管道。通常这正是您想要的过程,但有时可能有人编写了一个测试,只有他们知道失败的原因以及如何修复它,而您仍然希望部署到生产环境。

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    下面的设置怎么样:

    1. 使培训和生产依赖于构建步骤
    2. 创建一个附加阶段,就像“ManualValidation@0”任务一样,它依赖于构建步骤
    3. condition 添加到培训和生产中,如果暂存成功或手动验证成功,则为 true。

    用于手动验证的 yaml:

    - stage: DeploymentValidation
      dependOn: Build
      jobs:
      - job: waitForValidation
        displayName: Wait for external validation  
        pool: server    
        steps:   
        - task: ManualValidation@0
          timeoutInMinutes: 1440 # task times out in 1 day
          inputs:
              instructions: 'Please validate the build configuration and resume'
              onTimeout: 'reject'
    

    条件的yaml:

    condition: or(succeeded('Staging'), succeeded('DeploymentValidation'))
    

    一般来说,我会问自己以下问题:

    • 为什么您的开发人员能够将测试不稳定或失败的代码合并到您的发布分支中?
    • 您的开发人员是否也无法在其功能/开发分支的“暂存”中运行上述测试?

    在您的 PR 验证期间的理想情况下,您在暂存期间运行的相同测试也会运行,这使您的开发人员确信当前构建确实已准备好合并到发布分支中。在我看来,在暂存期间发现某些自动化测试由于某个开发人员的工件而失败已经为时已晚。

    【讨论】:

    • 代码 sn-ps 只是一个草稿。如果您需要更多输入或有一些关于它们的 cmets,请保持我的更新。
    • 我们除了 main 没有任何其他的分支。登台、生产和培训都是环境。我们可能想要排除的任何功能都由功能切换控制。这些将是 UI E2E 测试,并且由于应用程序的大小和复杂性,不可能在本地运行整个或部分应用程序以运行这些类型的测试。无法与您关于需要修复测试的观点争论 - 只是我们目前只有一个人能够修复它们。不过,您提供的 Yano 看起来可能很有用。谢谢
    • 也许现在是引入功能分支和拉取请求审查以启用合并到您的主分支的好时机。在您的拉取请求验证期间,您可以在 PR 阶段部署工件并运行您的测试。因此,您无需在本地运行所有内容,而是为您的开发人员提供另一个尽可能接近生产的测试阶段。
    猜你喜欢
    • 2020-10-31
    • 2021-03-18
    • 2020-08-13
    • 2022-11-03
    • 2020-10-22
    • 2021-03-25
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多