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

hos*_*jay 13 yaml azure-devops azure-pipelines

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

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

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

在此处输入图片说明

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

Gee*_*vdC 39

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

trigger: none
Run Code Online (Sandbox Code Playgroud)

  • 对于多阶段管道,我们希望构建阶段自动发生,但将阶段部署到需要手动触发的环境,这将如何工作? (9认同)

Lev*_*SFT 12

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

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

您可以将登台生产阶段移至经典 Web UI 发布管道。手动触发阶段在 Web UI 发布管道中可用。请在此处查看更多信息。

在此处输入图片说明

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

在此处输入图片说明

在此处输入图片说明

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

  • @GeertvdC 你在哪里看到现在可用? (3认同)

Sha*_*zyk 11

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

当您单击“运行管道”时,单击“要运行的阶段”:

在此处输入图片说明

现在选择将运行哪个阶段:

在此处输入图片说明


Ale*_*lex 11

我有一个更干净的解决方案,我已经使用了一段时间了。它与我在此处发布的原始解决方案类似,但我不是手动向管道添加变量,而是添加一个参数并将其用作在特定环境中触发部署的条件。

azure-pipelines.yaml 如下所示:

trigger:
- master

parameters:
- name: deployDEV
  displayName: Deploy to DEV
  type: boolean
  default: false

stages:
- stage: Build
  jobs:
  - job: Build
    steps:
    - script: |
        echo "Building something..."

- stage: Release_DEV
  displayName: Release to DEV
  condition: |
    and(
      succeeded('Build'), 
      eq(${{ parameters.deployDEV }}, true)
    )
  dependsOn: Build
  jobs:
  - job: Release DEV
    steps:
    - script: |
        echo "Releasing to DEV..."
Run Code Online (Sandbox Code Playgroud)

此解决方案的优点在于,当您启动新实例时,您将在 UI 中获得参数作为选项,如下所示:

在此输入图像描述


Ale*_*lex 7

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

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

在此处输入图片说明

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

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

现在,每当您想要将构建部署到生产时,您都可以启动构建,然后从此处覆盖变量:

在此处输入图片说明

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