定义审批和检查

Azure Pipelines

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

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

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

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

重要

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

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

审批

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

  1. 在 Azure DevOps 项目中,请参阅资源 (需要保护的环境) 的示例。

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

针对环境的批准和检查。

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

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

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

你还可以将请求的 (启动或创建) 的用户从完成审批的状态限制为 "已启动" 或 "创建"。 此选项通常用于在用户之间划分角色。

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

分支控制

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

定义分支控制检查:

  1. 在 Azure DevOps 项目中,请参阅资源 (需要保护的环境) 的示例。

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

  3. 选择 分支控制 检查,并提供以逗号分隔的允许分支列表。 您可以规定分支应该启用了保护,其中一个分支的 "签入" 保护状态的行为是未知的。

正在配置分支控制检查。

在运行时,检查将针对允许列表验证运行中的所有链接资源的分支。 如果任何分支与条件不匹配,则检查将失败,并且阶段标记为 "失败"。

注意

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

营业时间

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

配置营业时间检查。

如果在营业时间结束时未启动阶段的执行 (将其保存到一些其他检查) 中,则会自动撤消工作时间批准,并计划在下一天重新评估。 如果在指定的 超时 期限内未启动阶段的执行,则检查将失败,并且该阶段标记为失败。

调用 Azure 函数

Azure 函数是由 Azure 提供的无服务器计算平台。 利用 Azure 函数,你可以运行少量的代码 (称为 "函数" ) ,而无需担心应用程序基础结构。 由于具有高灵活性,Azure 函数为创作自己的检查提供了一个好方法。 包括签入 Azure 函数的逻辑,以便每次执行 http 请求时触发,执行时间较短并返回响应。 定义检查时,可以分析响应正文,以推断检查是否成功。 可以使用控制选项中的 "评估间隔时间" 设置定期重复计算。 了解详细信息

正在配置 Azure 函数检查。

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

注意

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

调用 REST API

调用 REST API 检查使你可以与现有服务集成。 定期调用 REST API 并在它返回成功的响应时继续操作。 了解详细信息

可以使用控制选项中的 " 评估间隔时间 " 设置定期重复计算。 如果未在指定的 超时 期限内开始执行阶段,则检查将失败。 有关更多详细信息,请参阅 调用 REST API 任务

注意

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

查询 Azure Monitor 警报

Azure Monitor 提供对 Azure 基础结构和每个单独的 Azure 资源中的数据的可视化、查询、路由、警报、自动缩放和自动化功能。 警报是一种标准方法,用于检测基础结构或应用程序的运行状况问题,并采取纠正措施。 大量部署和过渡部署是常见的部署策略,用于降低回归给关键应用程序的风险。 部署到) 的客户 (集之后,应用程序将在一段时间内观察到。 部署后,应用程序的运行状况用于决定是否应将更新进行到下一阶段。

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

计算在控制选项中的 " 评估间隔 " 设置之间重复进行。 如果未在指定的 超时 期限内开始执行阶段,则检查将失败。

所需的模板

通过所需的模板检查,可以强制管道使用特定的 YAML 模板。 完成此检查后,如果管道未从引用的模板扩展,则管道将失败。

定义所需的模板审批:

  1. 在Azure DevOps,转到限制的服务连接。

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

  3. 在"添加第一个检查"菜单中,选择"所需的模板"。

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

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

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

配置所需的模板检查。

评估项目

可以评估项目 () 策略部署到环境的项目。

注意

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

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

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

查看环境。

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

向环境添加检查。

  1. 选择"评估项目"。

添加评估项目检查。

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

添加策略定义。

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

查看传递的检查。

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

查看传递的检查日志。

排他锁

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

ServiceNow 更改管理

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

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

常见问题解答

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

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

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

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

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

可以启用此方案

  1. 通过"营业时间"检查,可以安排部署到资源的所有阶段在时间窗口之间执行
  2. 在同一资源上配置审批时,阶段将等待审批,然后再开始。
  3. 可以在资源上配置这两个检查。 阶段将等待审批和营业时间。 审批完成后,它将在下一个计划窗口中启动。

能否等待正在部署的项目上的安全扫描完成?

若要等待正在部署的项目上完成安全扫描,需要使用 AquaScan 等外部扫描服务。 在开始检查之前,需要将部署的项目上传到扫描服务可访问的位置,并且可以使用预定义的变量 进行标识。 使用 Invoke REST API 检查,可以添加检查以等待安全服务中的 API,并传递项目标识符作为输入。

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

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