自动推送到 ArtifactRegistry 后将容器部署到 Cloud Run

问题描述 投票:0回答:4

我想在 Google Cloud ArtifactRegistry 和 Cloud Run 之间建立连接(无需编写代码)。因此,在每次推送时,我都想在 Cloud Run 上创建/更新同名的服务。

这可能吗?

google-cloud-platform google-cloud-run google-artifact-registry
4个回答
1
投票

现在,当新工件上传到 Artifact Registry 时,有两种不同的方法可以自动执行代码:

第一个选项:Pub/Sub 触发的云函数

ArtifactRegistry 将有关新插入和删除的工件的消息发布到 Pub/Sub 主题

gcr
。请注意,您可能必须自己创建此主题。

要对工件的更改做出反应,您可以创建一个由发送到该主题的消息触发的云函数。请注意,您需要在云函数中按

attributes.action=="INSERT"
过滤接收到的消息,以便仅对创建新工件执行操作,而不对删除工件执行操作。

有关此内容的更多信息,请参阅 GCP 文档:https://cloud.google.com/artifact-registry/docs/configure-notifications

第二个选项:Eventarc 触发的云函数

使用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


0
投票

不,你不能。推送映像的系统必须在使用新映像触发新 Cloud Run 修订版的部署之后。如果需要,可以使用

latest
标签。

Artifact 注册表上的推送事件不可能自动进行。


0
投票

我建议你考虑容器注册表,然后你可以连接自动事件。


0
投票

这就是我所做的:

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

不要忘记更改变量值。

© www.soinside.com 2019 - 2024. All rights reserved.