使用政策限制部署行为

本文档介绍了如何使用部署政策来限制手动或自动提交流水线操作。

部署政策是一种 Cloud Deploy 资源,可用于限制对所选提交流水线或目标(或所有流水线或目标)执行的手动或自动操作。

哪些行为可以受到限制?

您可以创建部署政策,以限制或禁止 Cloud Deploy 对发布版本执行特定操作。例如,一项政策 在指定时间段内为给定交付流水线创建发布作业。 例如,您可以将其用于季节性限制。

如何评估和强制执行政策

对于所有手动操作或自动操作,Cloud Deploy 都会执行以下操作:

  1. 检查 Identity and Access Management 权限。

    如果用户或服务账号没有适当的 IAM 权限,则无需执行此操作,也无需评估部署 政策。

  2. 查看是否存在适用于目标或投放的政策 如果有,则对政策进行评估。

    • Cloud Deploy 会评估所执行的操作, 规则。

      也就是说,操作类型和调用方是否与政策匹配?

    • Cloud Deploy 会检查为政策定义的日期和时间范围,以确定该政策在请求时是否有效。

    • 如果政策生效且规则确实适用于提交流水线或目标以及操作,系统会强制执行该规则并阻止相应操作。

要求和限制

  • 每项政策都必须至少有一个选择器。

  • 每项政策必须至少有一条规则。

    在部署政策中,所有规则 ID 都必须是唯一的。

  • 每条规则都必须至少有一个 timeWindows,并且在该 timeWindows 内, 必须具有 oneTimeWindowsweeklyWindows

    如需详细了解如何使用时间段,请参阅日期和时间

  • 每个项目/位置的部署政策不得超过 1,000 个。

所需的 Identity and Access Management 角色和权限

除了运行任何 Cloud Deploy 部署流水线以及执行受政策限制的任务所需的权限之外,您还需要具备多项权限才能对政策资源执行特定操作:

  • clouddeploy.deployPolicies.create
  • clouddeploy.deployPolicies.delete
  • clouddeploy.deployPolicies.get
  • clouddeploy.deployPolicies.list
  • clouddeploy.deployPolicies.update
  • clouddeploy.deployPolicies.override

roles/clouddeploy.policyAdmin 角色包含这些权限。此外,roles/clouddeploy.policyOverrider 角色还包含 .override 权限。

创建部署政策

创建 deploy-policy 资源包括以下步骤:

  1. 使用部署政策配置创建 YAML 文件。

    该配置包含一个标头,该标头可将资源标识为 部署政策name 是必需的。

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. 添加对政策适用的交付流水线和目标(selectors)的引用。

    请参阅部署政策选择器配置架构参考文档 ,详细了解政策选择器以及如何配置政策选择器。

  3. 添加一项或多项政策 rules

    每条规则都描述了一种限制以及 限制。如需详细了解政策规则及其配置方式,请参阅部署政策规则配置架构参考文档

  4. 应用该文件,并使用 gcloud deploy apply --filename= 创建 资源。

现在,系统会根据部署政策资源中的规则限制所引用的交付流水线或目标。

部署政策选择器

部署政策中定义的选择器 配置、确定 哪些交付流水线和目标受给定规则影响。

选择器在部署政策的 selectors 节中定义 配置配置为:

selectors:
- deliveryPipeline:
    id:
    labels:
  target:
    id:
    labels:

在此配置 YAML 中,deliveryPipeline.id 会接受 并且 target.id 会获取目标的名称(在这两种情况下, metadata.name)。

您可以使用 id: * 选择所有交付流水线或所有目标。您还可以使用标签来匹配交付流水线或目标,或同时匹配这两者。

在给定选择器中,各项内容之间是 AND 关系。多个选择器会进行 OR 运算。也就是说,如果给定请求受到此政策的限制,该请求必须应用于 至少一个选择器。但在该选择器中,请求必须与所有 项。

部署政策规则

每项部署政策都包含一个或多个政策规则,这些规则用于定义在所选的提交流水线或目标中受限的操作。该规则还定义了在什么情况下应用该规则。

可用的规则如下:

  • rolloutRestriction

rolloutRestriction 规则可防止对所选提交流水线使用的所选目标执行指定的发布操作。此规则 使用时间窗口来定义何时无法为 选定的交付流水线和目标。请参阅日期和时间,了解 有关如何在部署政策规则中指定日期和时间的说明。

在规则生效期间,您可以限制以下操作:

  • ADVANCE

    您无法推进发布阶段。

  • APPROVE

    无法批准发布促销活动

  • CANCEL

    您无法取消发布。

  • CREATE

    无法创建发布作业。如果政策阻止您执行此操作,您可以创建版本,但该版本不会触发发布。

  • IGNORE_JOB

    无法忽略作业。

  • RETRY_JOB

    作业无法重试

  • ROLLBACK

    发布无法回滚

  • TERMINATE_JOBRUN

    作业运行无法终止

    请参阅 配置架构参考文档 该规则的 YAML 结构

rolloutRestriction 规则中的日期和时间

您可以配置日期和时间块,以指定部署政策生效的重复和非重复时间范围。

以下是关于表示日期和时间的要求:

  • 日期表示为 yyyy-mm-dd

  • 在表示一天中的时间时,一天的开始是 00:00,一天的结束是 24:00

  • 对于 oneTimeWindows,日期必须包含时间。对于 weeklyWindows,您 可以省略时间。但是,如果你添加startTime,则必须也添加 endTime,反之亦然。

    例如,仅在星期日冻结的设置如下所示:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
      endTime: "24:00"
    

    您还可以执行以下操作:

    - daysOfWeek: [SUNDAY]
    

    但不应使用以下内容:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
    
  • 您必须在 timeWindows 诗节中添加时区。

    例如:timeZone: America/New_York

非重复时间范围

非重复时间范围在特定的日期和时间结束。您可以将其用于您想要限制发布时间的任何时间段。

非重复时间窗口使用 oneTimeWindows 诗节进行配置。

重复时间范围

重复时间窗口用于描述您在此期间的重复时间块 来限制发布的作业例如,你可以用它来限制发布 。

重复时间窗口使用 weeklyWindows 节进行配置。

示例

本部分包含一些使用日期和时间来配置部署政策生效时间的示例。

年度冻结

如果您想在一年中的某个时间冻结发布,可以配置 oneTimeWindows 块来实现此目的。如果日期是可预测的(每年相同),您仍然需要使用多个 oneTimeWindow 块。

以下 YAML 显示了强制实施 年度冻结部署政策:

timeWindows:
  timeZone: "America/New_York"
  oneTimeWindows:
  - start: "2024-12-22 17:00"
    end: "2025-01-02 09:00"

此 YAML 描述了 2024 年 12 月 22 日下午 5 点到 1 月的时间范围 2025 年 9 月 2 日上午 9 点。

周末反复卡住

以下 YAML 显示了强制执行部署政策的重复时间范围 限制在周末发布,即周五下午 5 点至周一早上 上午 9 点:

timeWindows:
  timeZone: "America/New_York"
  weeklyWindows:
  - daysOfWeek: [FRIDAY]
    startTime: "17:00"
    endTime: "24:00"
  - daysOfWeek: [SATURDAY, SUNDAY]
    startTime: "00:00"
    endTime: "24:00"
  - daysOfWeek: [MONDAY]
    startTime: "00:00"
    endTime: "09:00"

更新部署政策

更新部署政策包括以下步骤:

  1. 修改政策配置 YAML。

    如果您使用 Google Cloud 控制台创建了政策,则可以通过在部署政策详情页面上选择 YAML 标签页来获取 YAML 配置。然后,您可以将该文本复制到本地文件中并进行修改

  2. 使用 gcloud deploy apply --filename= 应用该文件。

    此操作会使用新配置更新部署政策资源。

由于系统会在尝试执行受限操作时评估部署政策,因此对所有 Cloud Deploy 资源执行的所有此类操作都受更新后的政策约束。也就是说,之前的限制不会保留。例如,假设整个月的 restrictRollouts 块 您在 12 月和 12 月 14 日更新相关政策,使此限制解除 发布功能在 12 月 15 日之后不再受阻。

覆盖部署政策

如有必要,您可以覆盖部署政策。例如,如果有 生产环境中的部署存在问题,您需要将其回滚, 有一项部署政策阻止了发布,您可以在以下位置覆盖该政策: 以便回滚不良发布

要覆盖部署政策,您必须拥有 clouddeploy.deployPolicies.override IAM 权限。

您可以通过 gcloud CLI 或使用 Google Cloud 控制台:

控制台

  1. 在 Google Cloud 控制台中,尝试执行被政策阻止的操作。

    系统会显示一个对话框,指明相应操作已被部署政策屏蔽。此对话框包含指向导致系统阻止执行此操作的具体政策的链接。

  2. 在提供的文本字段中,输入相应政策的名称,然后点击尝试替换政策

    如果您拥有权限覆盖 Cloud Deploy 现在会执行操作。

gcloud CLI

如需使用 gcloud CLI 替换部署政策,请针对该政策会阻止的任何操作,将 --override-deploy-policies 添加到相应命令。例如,以下命令会将 从而覆盖原本禁止 促销活动:

 gcloud deploy releases promote --release=my-release-001 \
   --project=my-policy-testing-project \
   --region=us-central1 \
   --delivery-pipeline=my-pipeline \
   --to-target=prod-target \
   --override-deploy-policies=my-deploy-policy

删除部署政策

如需删除部署政策,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 部署政策页面。

    打开“部署政策”页面

    该页面包含当前项目中可用的部署政策的列表(如果有)。

  2. 选择 操作 按钮,然后点击 删除部署政策

  3. 输入部署政策名称以确认删除,然后点击 确认

    该政策现已删除,您现在可以执行该政策限制的任何操作。

gcloud CLI

要使用 gcloud CLI 删除部署政策,请运行 以下命令:

 gcloud deploy deploy-policies delete \
    --project=[PROJECT] \
    --region=[REGION] \
    [POLICY_NAME]

替换以下内容:

  • [POLICY_NAME]

    所定义的政策的名称, 政策配置文件

  • [PROJECT]

    您在其中创建了 部署政策

  • [REGION]

    您创建部署政策的区域。

删除部署政策资源后,受影响的交付流水线和 定位条件不再适用此政策,因此不会受到限制,除非 部署政策

部署政策的日志记录

评估部署政策时,平台日志 会创建条目以执行以下操作:

  • 政策评估

    如果系统评估了请求并违反了相关政策,则系统会写入平台日志。 如果请求违反了政策,但由于政策已暂停或被替换,因此系统允许该请求,系统也会写入日志。由于没有违反政策,因此在授予请求时不会写入日志。

  • 在部署政策资源发生更改时,Pub/Sub 通知失败。

后续步骤