本文档介绍了如何使用部署政策来限制手动或自动提交流水线操作。
部署政策是一种 Cloud Deploy 资源,可用于限制对所选提交流水线或目标(或所有流水线或目标)执行的手动或自动操作。
哪些行为可以受到限制?
您可以创建部署政策,以限制或禁止 Cloud Deploy 对发布版本执行特定操作。例如,一项政策 在指定时间段内为给定交付流水线创建发布作业。 例如,您可以将其用于季节性限制。
如何评估和强制执行政策
对于所有手动操作或自动操作,Cloud Deploy 都会执行以下操作:
检查 Identity and Access Management 权限。
如果用户或服务账号没有适当的 IAM 权限,则无需执行此操作,也无需评估部署 政策。
查看是否存在适用于目标或投放的政策 如果有,则对政策进行评估。
Cloud Deploy 会评估所执行的操作, 规则。
也就是说,操作类型和调用方是否与政策匹配?
Cloud Deploy 会检查为政策定义的日期和时间范围,以确定该政策在请求时是否有效。
如果政策生效且规则确实适用于提交流水线或目标以及操作,系统会强制执行该规则并阻止相应操作。
要求和限制
每项政策都必须至少有一个选择器。
每项政策必须至少有一条规则。
在部署政策中,所有规则 ID 都必须是唯一的。
每条规则都必须至少有一个
timeWindows
,并且在该timeWindows
内, 必须具有oneTimeWindows
或weeklyWindows
。如需详细了解如何使用时间段,请参阅日期和时间。
每个项目/位置的部署政策不得超过 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 资源包括以下步骤:
使用部署政策配置创建 YAML 文件。
该配置包含一个标头,该标头可将资源标识为 部署政策
name
是必需的。apiVersion: deploy.cloud.google.com/v1 kind: DeployPolicy metadata: name: description:
添加对政策适用的交付流水线和目标(
selectors
)的引用。添加一项或多项政策
rules
。应用该文件,并使用
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"
更新部署政策
更新部署政策包括以下步骤:
修改政策配置 YAML。
如果您使用 Google Cloud 控制台创建了政策,则可以通过在部署政策详情页面上选择 YAML 标签页来获取 YAML 配置。然后,您可以将该文本复制到本地文件中并进行修改
使用
gcloud deploy apply --filename=
应用该文件。此操作会使用新配置更新部署政策资源。
由于系统会在尝试执行受限操作时评估部署政策,因此对所有 Cloud Deploy 资源执行的所有此类操作都受更新后的政策约束。也就是说,之前的限制不会保留。例如,假设整个月的 restrictRollouts
块
您在 12 月和 12 月 14 日更新相关政策,使此限制解除
发布功能在 12 月 15 日之后不再受阻。
覆盖部署政策
如有必要,您可以覆盖部署政策。例如,如果有 生产环境中的部署存在问题,您需要将其回滚, 有一项部署政策阻止了发布,您可以在以下位置覆盖该政策: 以便回滚不良发布
要覆盖部署政策,您必须拥有
clouddeploy.deployPolicies.override
IAM 权限。
您可以通过 gcloud CLI 或使用 Google Cloud 控制台:
控制台
在 Google Cloud 控制台中,尝试执行被政策阻止的操作。
系统会显示一个对话框,指明相应操作已被部署政策屏蔽。此对话框包含指向导致系统阻止执行此操作的具体政策的链接。
在提供的文本字段中,输入相应政策的名称,然后点击尝试替换政策。
如果您拥有权限覆盖 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
删除部署政策
如需删除部署政策,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Deploy 部署政策页面。
该页面包含当前项目中可用的部署政策的列表(如果有)。
选择
操作 按钮,然后点击 删除部署政策。输入部署政策名称以确认删除,然后点击 确认。
该政策现已删除,您现在可以执行该政策限制的任何操作。
gcloud CLI
要使用 gcloud CLI 删除部署政策,请运行 以下命令:
gcloud deploy deploy-policies delete \
--project=[PROJECT] \
--region=[REGION] \
[POLICY_NAME]
替换以下内容:
[POLICY_NAME]
所定义的政策的名称, 政策配置文件。
[PROJECT]
您在其中创建了 部署政策
[REGION]
您创建部署政策的区域。
删除部署政策资源后,受影响的交付流水线和 定位条件不再适用此政策,因此不会受到限制,除非 部署政策
部署政策的日志记录
评估部署政策时,平台日志 会创建条目以执行以下操作:
政策评估
如果系统评估了请求并违反了相关政策,则系统会写入平台日志。 如果请求违反了政策,但由于政策已暂停或被替换,因此系统允许该请求,系统也会写入日志。由于没有违反政策,因此在授予请求时不会写入日志。
在部署政策资源发生更改时,Pub/Sub 通知失败。
后续步骤
如需详细了解如何配置部署政策,请参阅配置文件架构。