Azure Pipelines Stages (YAML) 上的手动触发器

Posted

技术标签:

【中文标题】Azure Pipelines Stages (YAML) 上的手动触发器【英文标题】:Manual Trigger on Azure Pipelines Stages (YAML) 【发布时间】:2020-02-28 05:52:27 【问题描述】:

我正在使用 Azure Pipelines YAML 格式设置管道。我创建了 3 个阶段:构建、暂存和生产。顾名思义,构建阶段构建项目并发布构建工件。暂存阶段部署到暂存环境,生产阶段部署到生产环境。

在我的项目的环境部分,我添加了对生产环境的检查,以便我可以在上线之前批准部署。

我的管道的工作方式是在构建阶段完成后自动触发暂存和生产阶段。我不喜欢的是,当开发人员将他们的代码部署到 Staging 时,他们需要几天的时间在 Staging 上对其进行测试,然后再将他们的代码推送到生产环境。所以,在那之前,我的管道一直在运行并等待我的批准。左上角的微调器一直在旋转,“时长”字段一直在经过。

有什么方法可以让开发人员在准备就绪时手动触发生产阶段,而不是构建阶段触发它?

【问题讨论】:

它不能解决问题,但您可以让“生产”阶段在“暂存”阶段使用dependsOn 条件。这将确保它在成功部署到 Staging 之前不会等待或尝试部署到生产环境。随着您添加自动化测试,这变得更有价值。 @Sidah Merzouk 于 2020 年 10 月在 Microsoft 博客上发布了有关此问题的公告。但此后没有任何信息...devblogs.microsoft.com/devops/… 【参考方案1】:

yaml 管道中的手动阶段目前不可用。此feature 请求已提交给 Microsoft。你可以去投票或提交一个新的。

有一些解决方法可以实现这一点。

您可以将 stagingproduction 阶段移至 Classic Web UI Release Pipeline。 Web UI 发布管道中提供了手动触发阶段。详情请查看here。

实现此目的的另一种方法是将您的 yaml 管道分成两个 yaml 管道(阶段管道和生产管道)。并禁用生产流水线的 CI 构建(在流水线编辑页面中,单击右上角的 3 点并选择触发器。请参考下图)。

这样您就可以在开发人员完成测试后手动运行生产管道。

【讨论】:

它现在可用,所以可能想改变它 @GeertvdC 你在哪里看到它现在可用? 寻找 yaml 支持的确认。已对此进行赏金以引起注意。【参考方案2】:

是的,它可以做到。我们不直接在 yaml 中执行此操作。但相反,我们在 YAML 中添加环境。在环境中我们添加了手动触发器。

 environment: 'smarthotel-dev'

环境和触发器通过 UI 进行管理。

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/environments?view=azure-devops

【讨论】:

什么是“手动触发器”?我在检查列表中看到的最接近的是批准,而 OP 特别不喜欢在决定是否部署到 prod 时等待批准。【参考方案3】:

您可以将触发器设置为 none 以禁用 CI 并仅手动触发它

trigger: none

【讨论】:

这对于我们希望构建阶段自动发生但将阶段部署到手动触发的环境的多阶段管道如何工作?【参考方案4】:

我认为有更好的方法。您可以添加一个可以在启动管道时覆盖的管道变量。

您必须向管道添加一个新变量并选择“让用户在运行此管道时覆盖此值”。

在您的管道中为您的阶段添加一个条件,例如:

condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(variables['DEPLOY_PROD'], 'true')))

现在,当您希望将构建部署到生产环境时,您可以开始构建,然后从此处覆盖变量:

将值设置为“true”,您的构建将触发您想要的阶段。

【讨论】:

【参考方案5】:

您可以指定要运行的阶段。

当你点击“Run pipeline”时,点击“Stages to run”:

现在选择要运行的分阶段:

【讨论】:

不错,这看起来很有希望。明天我会验证并分享一些反馈。您是否只是碰巧发现了这一点(如果是这样就很好),或者您是否知道这是否记录在某处? @scniro 在这里查看:docs.microsoft.com/en-us/azure/devops/release-notes/2019/… 如果我启用了 CI 并且我不想手动运行管道,它会起作用吗? @imtiyaz283 我认为CI会触发所有管道。 @ShaykiAbramczyk 是的,它会触发所有管道。我有 Dev、itg、stg、pro。我只需要 CICD 直到开发。有时我需要跳过 itg 并手动直接部署到 stg 并且不应该严格遵循这些阶段。现在这似乎不可能。

以上是关于Azure Pipelines Stages (YAML) 上的手动触发器的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps Pipelines 中的条件阶段执行

Azure Pipelines 将 YAML 用于具有不同变量值但没有 YAML 重复的多个环境(阶段)

Jenkins Pipelines Summary

我可以通过 CLI 验证 azure-pipelines.yml 文件吗?

建立Azure Dev Ops持续集成和持续交付(CICD)(使用 Azure Pipelines 建立CICD)

建立Azure Dev Ops持续集成和持续交付(CICD)(使用 Azure Pipelines 建立CICD)