您可以从 Pub/Sub 接收有关 Docker 代码库更改的通知。通知适用于任何容器映像 存储在代码库中,包括 Helm 3 图表 打包为 OCI 格式。
Pub/Sub 会将代码库相关的消息发布到名为主题的指定资源上。订阅 Pub/Sub 主题的应用会收到这些消息,并在代码库的状态发生更改时收到通知。
Artifact Registry 会发布关于以下更改的消息:
- 映像上传
- 已向映像添加了新标记
- 删除映像
此外,您还可以配置角色和权限来发布或订阅通知。
如需了解如何配置活动(例如新的漏洞扫描结果)的 Artifact Analysis 通知,请参阅 Artifact Analysis 文档。
概览
Artifact Registry 会发布主题 gcr
中有关代码库更改的消息。
如需接收通知,您必须:
创建 Artifact Registry 主题
在 Google Cloud 项目中激活 Artifact Registry API 时,
Artifact Registry 自动创建一个 Pub/Sub
主题 ID 为 gcr
的主题。如果在同一 Google Cloud 项目中启用了 Container Registry,则该主题可能已经存在,因为这两项注册表服务使用相同的主题来发布消息。
如果“gcr
”主题被意外删除或缺失,您可以添加该主题
。例如,如果您的 Google Cloud 服务
组织存在组织政策限制条件,要求
使用客户管理的加密密钥 (CMEK) 进行加密。当
Pub/Sub API 在此限制条件的拒绝列表中。
服务无法自动使用 Google 拥有的密钥和 Google 管理的密钥创建主题。
要查看现有主题的列表,您可以查看 Pub/Sub 主题页面 或运行以下命令:
gcloud pubsub topics list
如需使用 Google 拥有和 Google 管理的密钥创建 gcr
主题,请执行以下操作:
控制台
转到 Google Cloud 控制台中的 Pub/Sub 主题页面。
点击创建主题。
输入主题 ID
gcr
。点击创建主题。
gcloud
运行以下命令:
gcloud pubsub topics create gcr --project=PROJECT-ID
将 PROJECT-ID 替换为您的 Google Cloud 项目 ID。如果您省略 --project
标志,命令会使用当前项目。
如需详细了解 gcloud pubsub topics
命令,请参阅 topics
文档。
如需使用 CMEK 加密创建 gcr
主题,请参阅 Pub/Sub 有关加密主题的说明。
创建 gcr
主题或验证其存在后,您可以创建对该主题的订阅。
创建订阅
为代码库更改创建主题后,您可以配置对该主题的订阅,其使用推送传送或拉取传送。我们建议使用拉取传送,因为 CI/CD 系统可以对存储的工件产生大量更改,而拉取传送对于大量消息来说会更有效。
如需创建采用拉取传送的订阅,请执行以下操作:
控制台
前往 Google Cloud 控制台中的 Pub/Sub 主题页面。
点击项目的主题。
点击创建订阅。
输入订阅名称:
projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
将传送类型设置保留为拉取。
点击创建。
gcloud
运行以下命令:
gcloud pubsub subscriptions create SUBSCRIPTION-NAME --topic=gcr
将 SUBSCRIPTION-NAME 替换为订阅的名称。
如需详细了解 gcloud pubsub subscriptions
命令,请参阅 subscriptions
文档。
您已订阅 gcr
主题。下一步是为触发代码库更改的身份配置权限。
配置订阅者应用
创建主题并订阅该主题后,您可以设置订阅者应用,即接收关于代码库更改的消息的应用。订阅者应用将执行事件通知、系统日志记录和应用间通信等任务。
代码库用户推送或删除映像时,会执行以下步骤:
Artifact Registry 服务账号会发布对
gcr
主题的更改。服务账号是 service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com。 其中 PROJECT-NUMBER 是您的 Google Cloud 项目编号。通过 Artifact Registry 服务账号具有pubsub.topics.publish
权限,以便它可以发布对主题的更改。如果管理员撤消了 Artifact Registry 服务账号的
pubsub.topics.publish
权限,Artifact Registry 会尝试以代码库用户身份发布消息。在这种情况下,仓库用户的 账号必须拥有pubsub.topics.publish
权限,才能成功 发布消息Pub/Sub 会将消息从主题转发到您的订阅。
当订阅者应用请求接收消息时,它会从订阅中拉取新消息。
代表订阅者拉取消息的身份必须具有访问订阅的权限。您可以使用 Pub/Sub 订阅者角色授予此权限。
如需了解如何设置订阅者以便从使用拉取传送的订阅接收消息,请参阅使用拉取接收消息。
配置权限
您可以使用 Pub/Sub 权限来控制对主题和订阅的访问权限。
如需详细了解 Pub/Sub 权限以及如何授予对主题和订阅的访问权限,请参阅 Pub/Sub 的访问权限控制文档。
通知示例
Pub/Sub 以 JSON 格式字符串形式发送通知。请查看以下示例,了解从 Pub/Sub 接收 Artifact Registry 通知时会发生什么情况。
将映像推送到 Artifact Registry 时,通知载荷可能如下所示:
{
"action":"INSERT",
"digest":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5..."
}
将新映像标记推送到 Artifact Registry 时,通知载荷如下所示:
{
"action":"INSERT",
"digest":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5...",
"tag":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}
该消息使用 digest
或 tag
键标识相关映像。
从 Artifact Registry 中删除映像标记时,通知载荷可能如下所示:
{
"action":"DELETE",
"tag":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}
该消息可能包含 DELETE
或 INSERT
作为 action
键值。
后续步骤
- 阅读 Pub/Sub 文档。
- 如需深入了解 Pub/Sub,请参阅什么是 Pub/Sub?
- 详细了解 Pub/Sub 访问权限控制角色。