配置清理政策

Artifact Registry 清理政策用于定义自动删除不再需要的工件版本或保留您希望无限期存储的工件的条件。

如果您存储了许多工件版本,但只需要保留发布到生产环境的特定版本,清理政策会很有用。您可以定义删除政策(包含用于删除工件的条件),以及保留政策(包含用于保留工件的条件)。

如果工件版本同时符合删除政策和保留政策中的条件,Artifact Registry 会应用保留政策。

由删除政策触发的删除操作会计入您的 Artifact Registry 每个项目删除请求配额,且每个仓库每天的删除次数上限为 30 万次。

政策应用时间表

Artifact Registry 会使用定期运行的后台作业删除与您的清理政策匹配的工件,并保留符合这些政策的工件。更改会在大约一天内生效。

每个仓库的清理政策数量上限

您最多可以将 10 项清理政策应用于一个仓库。

支持的格式

您可以为所有代码库格式在标准代码库和远程代码库上设置清理政策。

所需的角色

如需获得应用或移除清理政策所需的权限,请让管理员为您授予代码库项目的 Artifact Registry Administrator (roles/artifactregistry.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含应用或移除清理政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

若要应用或移除清理政策,您需要具备以下权限:

  • artifactregistry.repositories.update
  • 如需删除符合清理政策中条件的工件,请执行以下操作: artifactregistry.versions.delete

您也可以使用自定义角色或其他预定义角色来获取这些权限。

Artifact Registry Service Agent 的默认角色包含 artifactregistry.versions.delete 权限,该权限是删除符合清理政策中条件的映像所必需的。

创建政策文件

政策文件是一种 JSON 文件,用于定义删除和保留政策。您可以通过创建和修改 JSON 文件,然后使用 Google Cloud CLI 或 Google Cloud 控制台应用政策来创建政策文件。删除政策用于指定删除工件的条件。保留政策用于指定保留工件或保留的最新版本数量的条件。您无法在同一保留政策中使用条件和最新版本。

创建删除政策

借助删除政策,您可以指定工件删除的最短或最长保留时限,以及其他过滤条件,以将政策限制为仅适用于特定工件。

如果您有某些工件因故不想被删除,请创建基于条件的保留政策,或创建最新版本保留政策以及删除政策。如果工件同时符合删除政策和保留政策中的条件,则系统会保留该工件。

控制台

您可以为新仓库或现有仓库创建删除政策。

如需向现有代码库添加删除政策,请执行以下操作:

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分中,选择试运行以测试新政策,然后再提交删除任何工件。如需详细了解如何查看测试结果,请参阅试运行

    确定您的政策按预期运行后,请再次修改代码库设置,然后选择删除工件以应用清理政策并删除所选工件。

  4. 点击添加清理政策,然后添加以下内容:

    • 名称:为清理政策指定名称。该名称在您应用于代码库的一组政策中必须是唯一的。
    • 政策类型:选择按条件删除
    • 标记状态:指示政策应检查是否有标记的工件或未标记的工件。将映像推送到或从代码库中拉取映像时,系统会为工件添加标记。如需详细了解 Docker 标记,请参阅容器概念

      • 任何标记状态:忽略标记状态,并同时应用于带标记和不带标记的工件。
      • 已标记:仅适用于已标记的工件。
      • 未标记:仅适用于未标记的工件。

      不支持代码的格式会被视为 untagged。如果代码库启用了不可更改的标记,则无法删除带标记的工件。

      如需详细了解应用于清理政策的标记状态,请参阅 TagState 参考文档

  5. 以下是定义删除政策的可选方法:

    • 代码前缀:代码前缀的逗号分隔列表。例如,前缀 teststaging 会与标记为 testenvstaging-1.5 的图片匹配。必须将 tagState 设置为 TAGGED,才能使用代码前缀。
    • 版本前缀:- 是工件版本前缀的逗号分隔列表。例如,v1v2 将与版本 v1.5v2.0alphav10.2 匹配。
    • 软件包前缀:工件名称前缀列表。您可以在前缀之间按 Enter, 输入多个前缀。例如,red, blue 会创建两个前缀 redblue,并与工件名称 red-teamredisbluebird 匹配。
    • 早于:是指从工件版本在仓库中创建到现在的最短时间,以时长指定。例如,30d 为 30 天。您可以通过分别附加 smhd 来指定秒、分钟、小时或天时长。
    • 不晚于:是指工件版本在代码库中创建后的最长时间,以时长为单位指定。例如,30d 为 30 天。
  6. 您可以点击添加清理政策来添加更多清理政策。

  7. 点击更新

    系统会将您的清理政策应用于您的代码库。您可以点击展开,在代码库详情部分查看您的清理政策。

JSON

{
  "name": "DELETE_POLICY_NAME",
  "action": {"type": "Delete"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

删除政策必须包含名称、操作和至少一个条件。

name
在删除政策代码段中,DELETE_POLICY_NAME 是政策的名称。该名称在您应用于代码库的一组政策中必须是唯一的。
action
对于删除政策,该值为 {"type": "Delete"}
condition
指定以下一项或多项条件
  • tagStateTAG_STATUS 指示政策应检查是否有标记的工件或未标记的工件。将映像推送到或从代码库中拉取映像时,系统会为工件添加标记。支持的值包括:

    • tagged:仅适用于标记的工件。
    • untagged:仅适用于未标记的工件。
    • any:忽略标记状态,并同时应用于已标记和未标记的工件。

    不支持代码的格式会被视为 untagged。如果代码库启用了不可变标记,则无法删除带有标记的工件。

    如需详细了解 Docker 标记,请参阅容器概念

  • tagPrefixesTAG_PREFIXES 是标记前缀的逗号分隔列表。例如,"test", "staging" 会与标记为 "testenv""staging-1.5" 的图片匹配。必须将 tagState 设置为 TAGGED,才能使用代码前缀。

  • versionNamePrefixesVERSION_PREFIXES 是工件版本前缀的逗号分隔列表。例如,"v1", "v2" 将匹配版本 "v1.5""v2.0alpha""v10.2"

  • packageNamePrefixesPACKAGE_PREFIXES 是工件名称前缀的逗号分隔列表。例如,"red", "blue" 将匹配工件名称 "red-team""redis""bluebird"

  • olderThanOLDER_THAN_DURATION 是工件版本在代码库中创建后的最短时间,以时长指定。例如,30d 为 30 天。您可以通过分别附加 smhd 来指定秒、分钟、小时或天时长。

  • newerThanNEWER_THAN_DURATION 是自工件版本在代码库中创建以来经过的最长时间,以时长指定。例如,30d 为 30 天。

创建基于条件的保留政策

基于条件的保留政策用于指定保留工件的条件。保留政策可与删除政策搭配使用,以保留根据删除政策的规范应被删除但您想保留的工件。如果工件同时符合删除政策和保留政策的条件,则系统会保留该工件。

控制台

您可以为新代码库或现有代码库创建保留政策。

如需向现有代码库添加保留政策,请执行以下操作:

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分中,选择试运行以测试新政策,然后再提交删除任何工件。您需要设置至少一项删除政策,才能查看保留政策的结果。如需详细了解如何查看测试结果,请参阅试运行

    确定您的政策按预期运行后,请再次修改代码库设置,然后选择删除工件以应用清理政策并删除所选工件。

  4. 点击添加清理政策,然后添加以下内容:

    • 名称:为清理政策指定名称。该名称在您应用于代码库的一组政策中必须是唯一的。
    • 政策类型:选择有条件保留
    • 标记状态:指示政策应检查是否有标记的工件或未标记的工件。将映像推送到或从代码库中拉取映像时,系统会为工件添加标记。如需详细了解 Docker 标记,请参阅容器概念

      • 任何标记状态:忽略标记状态,并同时应用于带标记和不带标记的工件。
      • 已标记:仅适用于已标记的工件。
      • 未标记:仅适用于未标记的工件。

      不支持代码的格式会被视为 untagged。如果代码库启用了不可更改的标记,则无法删除带标记的工件。如需详细了解应用于清理政策的标记状态,请参阅 TagState 参考文档

  5. 以下是定义保留政策的可选方法:

    • 代码前缀:代码前缀的逗号分隔列表。例如,前缀 teststaging 会与标记为 testenvstaging-1.5 的图片匹配。必须将 tagState 设置为 TAGGED,才能使用代码前缀。
    • 版本前缀:- 是工件版本前缀的逗号分隔列表。例如,v1v2 将与版本 v1.5v2.0alphav10.2 匹配。
    • 软件包前缀:工件名称前缀的英文逗号分隔列表。例如,red, blue 将匹配工件名称 red-teamredisbluebird
    • 早于:是指从工件版本在仓库中创建到现在的最短时间,以时长指定。例如,30d 为 30 天。您可以通过分别附加 smhd 来指定秒、分钟、小时或天时长。
    • 不晚于:是指工件版本在代码库中创建后的最长时间,以时长为单位指定。例如,30d 为 30 天。
  6. 您可以点击添加清理政策来添加更多清理政策。

  7. 点击更新

    系统会将您的清理政策应用于您的代码库。

JSON

格式与删除政策类似。对于保留政策,action 的值为 {"type": "Keep"}

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

替换以下内容:

  • KEEP_POLICY_NAME 为清理政策指定名称。该名称在您应用于代码库的一组政策中必须是唯一的。
  • TAG_STATUS 和标记状态,用于指明政策应检查是否有带标记的工件或未带标记的工件。将映像推送到或从存储库拉取时,系统会为工件添加标记。如需详细了解 Docker 标记,请参阅容器概念

    以下是各个选项:

    • tagged:仅适用于标记的工件。
    • untagged:仅适用于未标记的工件。
    • any:适用于所有版本

    不支持代码的格式会被视为 untagged。如果代码库启用了不可更改的标记,则无法删除带标记的工件。如需详细了解应用于清理政策的标记状态,请参阅 TagState 参考文档

  • TAG_PREFIXES 替换为标记前缀的逗号分隔列表。例如,前缀 teststaging 会与标记为 testenvstaging-1.5 的图片匹配。必须将 tagState 设置为 TAGGED,才能使用代码前缀。

  • VERSION_PREFIXES 替换为工件版本前缀的逗号分隔列表。例如,v1, v2 将匹配版本 v1.5v2.0alphav10.2

  • PACKAGE_PREFIXES 替换为工件名称前缀的英文逗号分隔列表。例如,red, blue 将匹配工件名称 red-teamredisbluebird

  • OLDER_THAN_DURATION,表示从代码库中创建工件版本以来的最短时间,以时长指定。例如,30d 为 30 天。您可以通过分别附加 smhd 来指定秒、分钟、小时或天时长。
  • NEWER_THAN_DURATION,表示从工件版本在代码库中创建起的最大时间,以时长指定。例如,30d 为 30 天。

为最新版本创建保留政策

您可以创建保留政策,以保留特定数量的版本。您不能在同一保留政策中使用有条件保留保留最新版本条件。

保留政策可与删除政策搭配使用,以保留根据删除政策的规范应被删除但您想保留的工件。如果工件同时符合删除政策和保留政策的条件,则系统会保留该工件。

控制台

您可以为新仓库或现有仓库创建“保留最新版本”政策。

如需向现有代码库添加“保留最新版本”政策,请执行以下操作:

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分中,选择试运行以测试新政策,然后再提交删除任何工件。您需要设置至少一项删除政策,才能查看保留政策的结果。如需详细了解如何查看测试结果,请参阅试运行

    确定您的政策按预期运行后,请再次修改代码库设置,然后选择删除工件以应用清理政策并删除所选工件。

  4. 点击添加清理政策,然后添加以下内容:

    • 名称:为清理政策指定名称。该名称在您应用于代码库的一组政策中必须是唯一的。
    • 政策类型:选择保留最新版本
  5. Keep count 字段中,输入要保留在代码库中的工件版本数。

  6. 可选:选择软件包前缀,指定要将保留政策应用到的软件包前缀。例如,red, blue 将匹配工件名称 red-teamredisbluebird

  7. 您可以点击添加清理政策来添加更多清理政策。

  8. 点击更新

    系统会将您的清理政策应用于您的代码库。您可以点击展开,在代码库详情部分查看您的清理政策。

JSON

格式与删除政策类似。对于保留政策,action 的值为 {"type": "Keep"}

用于保留特定数量版本的保留政策包含 mostRecentVersions 部分,而不是 condition 部分。

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "mostRecentVersions": {
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "keepCount": MINIMUM_NUMBER
  }
}

替换以下内容:

  • KEEP_POLICY_NAME 替换为保留政策的名称。该名称在您应用于代码库的一组政策中必须是唯一的。
  • PACKAGE_PREFIXES,其中包含要应用保留政策的可选软件包前缀。例如,red, blue 将匹配工件名称 red-teamredisbluebird
  • MINIMUM_NUMBER,用于指定要保留在代码库中的工件版本数。

如需将保留政策应用于代码库中的所有软件包,请省略 packageNamePrefixes 条件。系统会保留代码库中每个软件包的指定数量的近期版本。

政策文件示例

以下政策文件示例包含一个删除政策和两个保留政策。

  • 如果工件以字符串 alphav0 开头,delete-prerelease 政策会在上传 30 天后移除工件版本。
  • keep-tagged-release 政策会保留标记为前缀为 release 且文件名以 webappmobile 开头的工件。
  • keep-minimum-versions 政策会保留文件名以 webappmobilesandbox 开头的五个最新工件版本。
[
  {
    "name": "delete-prerelease",
    "action": {"type": "Delete"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["alpha", "v0"],
      "olderThan": "30d"
    }
  },
  {
    "name": "keep-tagged-release",
    "action": {"type": "Keep"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["release"],
      "packageNamePrefixes": ["webapp", "mobile"]
    }
  },
  {
    "name": "keep-minimum-versions",
    "action": {"type": "Keep"},
    "mostRecentVersions": {
      "packageNamePrefixes": ["webapp", "mobile", "sandbox"],
      "keepCount": 5
    }
  }
]

通过试运行测试您的政策

如需测试清理政策,您可以在控制台中将清理政策设置为试运行,或使用 --dry-run 标志运行 gcloud artifacts set-cleanup-policies 命令。

如需分析清理政策的影响,您可以查看工件注册库数据访问审核日志。如需接收清理政策的数据访问审核日志,您必须为 Artifact Registry 服务明确启用数据写入类型的数据访问审核日志。如需启用数据访问审核日志,请参阅启用审核日志

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分中,选择试运行

  4. 点击添加清理政策,然后为有条件删除有条件保留保留最新版本政策配置选项。

  5. 点击更新

当删除政策导致执行 BatchDeleteVersions 操作时,参数 validateOnly 的计算结果为 "true"

如需查询审核日志以了解清理政策的试运行情况,请运行以下命令:

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

输出类似以下内容:

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

gcloud

如需使用清理政策进行试运行,请运行以下命令:

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --dry-run

替换以下内容:

  • REPOSITORY 替换为代码库的名称。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。
  • LOCATION 是代码库的单区域或多区域位置

当删除政策导致执行 BatchDeleteVersions 操作时,参数 validateOnly 的计算结果为 "true"

如需查询审核日志以了解清理政策的试运行情况,请运行以下命令:

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

输出类似以下内容:

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

将政策应用于代码库

如需使用在本地 JSON 文件中定义的清理政策,请使用 gcloud CLI 将这些政策应用到您希望 Artifact Registry 自动删除工件版本的代码库。

如需应用在控制台中设置为试运行的清理政策,请将政策设置为删除工件

您只能将清理政策应用于标准代码库。您无法将清理政策应用于:

  • Google Cloud 项目。

控制台

如需应用清理政策,请执行以下操作:

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分中,选择删除工件

    Artifact Registry 会使用定期运行的后台作业删除与您的政策匹配的工件并保留其他工件。更改应该会在大约一天内生效。

gcloud

如需应用清理政策,请在包含清理政策文件的目录中运行以下命令。

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

替换以下内容:

  • REPOSITORY 替换为代码库的名称。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。
  • LOCATION 是代码库的单区域或多区域位置
  • POLICY_FILE 是包含清理政策的文件的名称。

--no-dry-run 标志会停用代码库的模拟运行功能。

例如,以下命令会将 policy.json 中的政策应用于项目 my-project 中位于区域 us-west1 的代码库 my-repo

gcloud artifacts repositories set-cleanup-policies my-repo \
    --project=my-project \
    --location=us-west1 \
    --policy=policy.json

Artifact Registry 会使用定期运行的后台作业删除与您的政策匹配的工件并保留其他工件。更改应该会在大约 1 天内生效。

更新政策

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分中,点击要设置为修改的政策的名称。

  4. 修改清理政策,然后点击更新

    系统会将您的清理政策应用于您的代码库。

gcloud

如需更新现有政策,请修改政策文件中的设置,然后运行以下命令以重新应用政策

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

替换以下内容:

  • REPOSITORY 替换为代码库的名称。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。
  • LOCATION 是代码库的单区域或多区域位置
  • POLICY_FILE 是包含清理政策的文件的名称。

--no-dry-run 标志会停用代码库的模拟运行功能。

列出代码库清理政策

您可以查看与代码库关联的清理政策。

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择要查看的代码库。

  3. 代码库详情部分,点击展开

    系统会显示清理政策名称。

  4. 如需查看或修改代码库的清理政策的详细信息,请点击修改代码库

    您现有的清理政策详情列在清理政策部分中。

gcloud

运行以下命令:

gcloud artifacts repositories list-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION

替换以下内容:

  • REPOSITORY 替换为代码库的名称。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。
  • LOCATION 是代码库的单区域或多区域位置

从代码库中移除政策

如果您不想让 Artifact Registry 自动删除工件版本,请从代码库中移除清理政策。

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 清理政策部分,将鼠标悬停在要删除的政策的名称上。

  4. 点击删除图标。

  5. 点击更新

    清理政策已被删除。

gcloud

运行以下命令:

gcloud artifacts repositories delete-cleanup-policies REPOSITORY \
    --policynames=POLICY_NAMES \
    --project=PROJECT_ID \
    --location=LOCATION

替换以下内容:

  • REPOSITORY 是代码库的名称。
  • PROJECT_ID 是您的 Google Cloud 项目的 ID。
  • LOCATION 是代码库的单区域或多区域位置
  • POLICY_NAMES 是您要移除的政策的政策名称的英文逗号分隔列表。

例如,以下命令会从项目 my-project 的区域 us-west1 中的代码库 my-repo 中移除名为 delete-test 的政策:

gcloud artifacts repositories delete-cleanup-policies my-repo \
    --policynames=delete-test \
    --project=my-project \
    --location=us-west1

清理政策的审核日志条目

如需在 Cloud Logging 中查看清理政策日志条目,您必须启用 DATA_WRITE 日志记录。

当您为代码库设置清理政策时,系统会将该操作记录为对代码库的更新(UpdateRepository 操作)。

当 Artifact Registry 删除工件版本时,会在 Cloud Logging 数据访问日志中记录该事件。日志条目显示 Artifact Registry 服务账号执行了删除操作。Artifact Registry 服务账号 ID 的格式为 service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

其他工具

对于容器映像,您还可以使用以下工具来管理映像生命周期:

  • gcrane:一种容器注册表工具,可用于在代码库之间复制映像。
  • gcr-cleaner:用于根据指定条件删除容器映像的工具。

gcranegcr-cleaner 工具不是 Google 官方产品。