定义审批和检查

Azure DevOps Services

管道由阶段组成。 管道作者可以通过在阶段上定义 条件 来控制阶段是否应运行。 控制阶段是否和何时运行的另一种方法是通过 审批和检查

管道依赖于环境、服务连接、代理池、变量组和安全文件等资源。 检查是否使 资源所有者 能够控制任何管道中的阶段是否可以使用资源。 作为资源的所有者,可以定义在使用该资源的阶段开始之前必须满足的检查。 例如,对环境的手动审批检查可确保仅在指定用户 () 查看所部署的更改之后才会部署到该环境。

阶段可以包含多个作业,每个作业都可以使用多个资源。 在开始执行阶段之前,必须满足该阶段中使用的所有资源的所有检查。 Azure Pipelines 在每个阶段之前暂停管道的执行,并等待完成所有挂起的检查。 根据每个检查中指定的重试间隔重新评估检查。 如果在指定的 超时 之前所有检查都未成功,则不会执行该阶段。 例如,如果任一检查最终失败 (,则拒绝对其中一个资源) 的审批,则不会执行该阶段。

在 yaml 文件中未定义审批和其他检查。 修改管道 yaml 文件的用户无法在阶段开始之前修改执行的检查。 资源的管理员使用 Azure Pipelines 的 Web 界面管理检查。

重要

可以在环境、服务连接、存储库、变量组、安全文件和代理池上配置检查。

服务连接不能由变量指定。

审批

可以使用审批检查手动控制阶段何时应运行。 这通常用于控制部署到生产环境的部署。

  1. 在 Azure DevOps 项目中,转到资源 (,例如需要保护的环境) 。

  2. 导航到资源对应的“审批和检查”。

审批和检查环境。

  1. 选择 “创建”,提供审批者和可选消息,然后再次选择“ 创建 ”以完成手动审批检查的添加。

可以将多个审批者添加到环境。 这些审批者可以是单个用户或用户组。 将组指定为审批者时,该组中只有一个用户需要批准运行才能向前推进。

使用高级选项,可以配置最少的审批者来完成审批。 组被视为一个审批者。

还可以限制 (发起或创建) 运行完成审批的用户。 此选项通常用于在用户之间隔离角色。

运行管道时,该运行的执行会暂停,然后进入使用该环境的阶段。 配置为审批者的用户必须评审和批准或拒绝部署。 如果同时执行多个运行,则必须独立批准或拒绝每个运行。 如果在为审批指定的 超时范围内 未完成所有必需的审批,并且所有其他检查都成功,则阶段将被标记为跳过。

分支控件

使用分支控制检查,可以确保通过 允许 的分支生成与管道链接的所有资源,并且分支已启用保护。 这有助于控制部署的发布准备和质量。 如果多个资源与管道链接,则会验证所有资源的源。 如果已链接另一个管道,则会验证要部署的特定运行的分支是否受到保护。

定义分支控制检查:

  1. 在 Azure DevOps 项目中,转到资源 (,例如需要保护的环境) 。

  2. 导航到资源对应的“审批和检查”。

  3. 选择 分支控件 检查,并提供允许的分支的逗号分隔列表。 可以强制启用分支保护,并且其中一个分支的签入案例保护状态的行为未知。

配置分支控制检查。

在运行时,检查将针对允许列表验证运行中所有链接资源的分支。 如果任一分支不符合条件,则检查会失败,阶段标记为失败。

备注

此检查要求分支名称完全限定。 确保分支名称的格式为 refs/heads/<branch name>

营业时间

如果希望环境中的所有部署仅在特定时间范围内发生,则营业时间检查是理想的解决方案。 运行管道时,使用资源的阶段的执行将等待工作时间。 如果同时执行多个运行,则每个运行都是独立验证的。 在营业时间开始时,检查会为所有运行标记为成功。

配置营业时间检查。

如果阶段的执行尚未在工作时间结束时开始, (由其他检查) 保持,则会自动撤销营业时间批准,并计划第二天重新评估。 如果阶段的执行未在为检查指定的 超时 时段内开始,并且阶段标记为失败,则检查会失败。

调用 Azure 函数

Azure Functions 是 Azure 提供的无服务器计算平台。 使用 Azure 函数,可以运行称为“functions”) 的小型 (代码片段,而无需担心应用程序基础结构。 考虑到较高的灵活性,Azure 函数提供了一种创作自己的检查的好方法。 包括签入 Azure 函数的逻辑,以便每次执行在 http 请求上触发,执行时间较短,并返回响应。 定义检查时,可以分析响应正文,以推断检查是否成功。 使用控件选项中的评估设置之间的时间,可以定期重复评估。 了解详细信息

配置 Azure 函数检查。

如果阶段未在指定的 超时 期内启动执行,则检查会失败。 有关详细信息,请参阅 Azure Function App 任务

备注

用户定义的管道变量不能访问检查。 只能从请求正文中的链接变量组访问预定义的变量和变量。

调用 REST API

调用 REST API 检查可以与任何现有服务集成。 定期调用 REST API,并在返回成功响应时继续。 了解详细信息

使用控件选项中的 评估设置之间的时间 ,可以定期重复评估。 如果阶段未在指定的 超时 期内启动执行,则检查会失败。 有关详细信息,请参阅 调用 REST API 任务

备注

用户定义的管道变量不能访问检查。 只能从请求正文中的链接变量组访问预定义的变量和变量。

查询 Azure Monitor 警报

Azure Monitor 提供 Azure 基础结构和每个 Azure 资源中的数据可视化、查询、路由、警报、自动缩放和自动化。 警报是检测基础结构或应用程序运行状况问题并采取纠正措施的标准方法。 Canary 部署和暂存推出是常见的部署策略,用于降低回归到关键应用程序的风险。 部署到阶段 (一组客户) 后,将观察应用程序一段时间。 部署后应用程序运行状况用于确定是否应将更新执行到下一阶段。

查询 Azure Monitor 警报有助于观察 Azure Monitor,并确保部署后不会针对应用程序引发任何警报。 如果在评估时未激活任何警报规则,则检查会成功。 了解详细信息

在控件选项中的 评估设置之间重复 计算。 如果阶段未在指定的 超时 期内启动执行,则检查会失败。

必需模板

通过所需的模板检查,可以强制实施管道以使用特定的 YAML 模板。 当此检查到位时,如果管道未从引用的模板扩展,则管道将失败。

若要定义所需的模板审批,请执行以下操作:

  1. 在 Azure DevOps 项目中,转到要限制 的服务连接

  2. 打开“编辑”旁边的菜单中的“审批和检查”。

  3. “添加第一个检查 ”菜单中,选择“ 必需”模板

  4. 输入有关如何访问所需模板文件的详细信息。

    • 存储库类型:存储库 (GitHub、Azure 或 Bitbucket) 的位置。
    • 存储库:包含模板的存储库的名称。
    • Ref:所需模板的分支或标记。
    • 所需模板的路径:模板的名称。

对于同一服务连接,可以有多个必需的模板。 在此示例中,所需的模板为 required.yml.

配置所需的模板检查。

评估项目

可以根据自定义策略评估要部署到环境的项目 () 。

备注

目前,这仅适用于容器映像项目

若要在项目 () 上定义自定义策略评估,请执行以下步骤。

  1. 在Azure DevOps Services项目中,导航到需要保护的环境。 详细了解 如何创建环境

查看环境。

  1. 导航到 “审批”并检查 环境。

向环境添加检查。

  1. 选择“ 评估项目”。

添加评估项目检查。

  1. 粘贴策略定义,然后单击“ 保存”。 详细了解 如何编写策略定义。

添加策略定义。

运行管道时,该运行的执行会暂停,然后进入使用该环境的阶段。 根据可用的图像元数据评估指定的策略。 当策略成功且失败时,检查会通过。 如果检查失败,阶段将标记为失败。

查看已通过的检查。

还可以从管道视图中查看策略检查的完整日志。

查看传递的检查日志。

独占锁

独占锁检查仅允许管道中的单个运行继续。 使用该资源的所有运行中的所有阶段都会暂停。 使用锁的阶段完成后,另一个阶段可以继续使用资源。 此外,仅允许一个阶段继续。

尝试锁定的任何其他阶段的行为由 lockBehavior 管道 YAML 文件中配置的值配置。

  • runLatest - 只有最新运行获取资源的锁。 runLatest 如果未 lockBehavior 指定,则为默认值。
  • sequential - 所有运行都按顺序获取受保护资源的锁。

若要对 sequential 部署使用独占锁检查,或 runLatest按照以下步骤操作:

  1. 在环境 (或其他受保护的资源) 启用独占锁检查。
  2. In the YAML file for the pipeline, specify a property called lockBehavior. 可以为整个 管道 或给定 阶段指定此项:

在舞台上设置:

stages:
- stage: A
  lockBehavior: sequential
  jobs:
  - job: Job
    steps:
    - script: Hey!

在管道上设置:

lockBehavior: runLatest
stages:
- stage: A
  jobs:
  - job: Job
    steps:
    - script: Hey!

如果未指定默认值 lockBehavior,则使用默认值 runLatest

独占锁检查仅允许管道中的单个运行继续。 使用该资源的所有运行中的所有阶段都会暂停。 使用锁的阶段完成后,另一个阶段可以继续使用资源。 此外,仅允许一个阶段继续。 尝试获取锁的任何其他阶段都将被取消。

ServiceNow 更改管理

此检查需要从市场安装 ServiceNow 更改管理扩展

servicenow 更改管理检查允许在管道中集成 ServiceNow 更改管理过程。 通过添加检查,可以在阶段开始时自动创建 ServiceNow 中的新更改请求。 管道在开始阶段之前等待更改过程完成。 此处提供了更多详细信息。

常见问题解答

定义的检查未启动。 发生了什么情况?

满足阶段条件后,检查评估将开始。 应确认在资源上添加检查后启动阶段的运行,并在阶段中使用该资源。

如何对计划阶段使用检查?

使用营业时间检查,可以控制阶段执行开始的时间。 可以在设计器版本中 的某个阶段上实现与预定义计划 相同的行为。

如何提前批准计划在未来运行的阶段?

可以启用此方案

  1. 工作时间检查使部署到资源的所有阶段都能够在时间范围之间计划执行
  2. 在同一资源上配置审批时,阶段会在开始之前等待审批。
  3. 可以在资源上配置这两个检查。 阶段将等待审批和工作时间。 审批完成后,它将在下一个计划窗口中启动。

是否可以等待完成正在部署的项目的安全扫描?

为了等待完成正在部署的项目上的安全扫描,需要使用像 AquaScan 这样的外部扫描服务。 部署的项目需要在扫描服务可访问的位置上传,然后才能开始检查,并使用 预定义变量进行标识。 使用调用 REST API 检查,可以添加检查以等待安全服务中的 API,并将项目标识符作为输入传递。

如何在检查中使用上一阶段的输出变量?

默认情况下,只有预定义的变量可用于检查。 可以使用链接变量组访问其他变量。 上一阶段的输出变量可以写入变量组,并在检查中访问。