我想在 Google Cloud ArtifactRegistry 和 Cloud Run 之间建立连接(无需编写代码)。因此,在每次推送时,我都想在 Cloud Run 上创建/更新同名的服务。
这可能吗?
现在,当新工件上传到 Artifact Registry 时,有两种不同的方法可以自动执行代码:
ArtifactRegistry 将有关新插入和删除的工件的消息发布到 Pub/Sub 主题
gcr
。请注意,您可能必须自己创建此主题。
要对工件的更改做出反应,您可以创建一个由发送到该主题的消息触发的云函数。请注意,您需要在云函数中按
attributes.action=="INSERT"
过滤接收到的消息,以便仅对创建新工件执行操作,而不对删除工件执行操作。
有关此内容的更多信息,请参阅 GCP 文档:https://cloud.google.com/artifact-registry/docs/configure-notifications
使用Eventarc,您可以对特定事件做出反应,例如将docker容器上传到ArtifactRegistry。为此,请确保为 ArtifactRegistry 启用数据访问审核日志,因为 Eventarc 仅支持基于审核日志的 ArtifactRegistry 事件:https://cloud.google.com/logging/docs/audit/configure-data-access #配置控制台启用
针对您的用例做出反应的适当方法应该是
Docker-PutManifest
。请参阅 https://cloud.google.com/eventarc/docs/event-types#artifact-registry 了解可用方法的完整文档。
部署由Eventarc触发的云函数:
gcloud functions deploy <YOUR_FUNCTION_NAME> \
--gen2 \
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=artifactregistry.googleapis.com" \
--trigger-event-filters="methodName=Docker-PutManifest"
...
有关更多信息,请参阅 https://cloud.google.com/functions/docs/calling/eventarc#deployment。
不,你不能。推送映像的系统必须在使用新映像触发新 Cloud Run 修订版的部署之后。如果需要,可以使用
latest
标签。
Artifact 注册表上的推送事件不可能自动进行。
我建议你考虑容器注册表,然后你可以连接自动事件。
这就是我所做的:
PROJECT_ID=your-project-id
IMAGE=europe-west1-docker.pkg.dev/your-project-id/repository-name/image:latest
SERVICE_NAME=your_service_name
REGION=europe-west1
docker build --push --platform linux/amd64 -t $IMAGE
gcloud config select $PROJECT_ID
gcloud run deploy $SERVICE_NAME --image $IMAGE --region $REGION
不要忘记更改变量值。