您可以透過 Pub/Sub 接收 Docker 存放區的變更通知。通知適用於存放於存放區的任何容器映像檔,包括以 OCI 格式封裝的 Helm 3 圖表。
Pub/Sub 會將存放區的相關訊息發布到稱為「主題」的具名資源。訂閱 Pub/Sub 主題的應用程式會收到這些訊息,並在存放區狀態變更時收到通知。
Artifact Registry 會針對下列變更發布訊息:
- 圖片上傳
- 圖片新增標記
- 圖片刪除
此外,您也可以設定發布或訂閱通知的角色和權限。
如要瞭解如何針對新安全漏洞掃描結果等活動設定 Artifact Analysis 通知,請參閱 Artifact Analysis 說明文件。總覽
Artifact Registry 會在名為 gcr
的主題中,發布有關存放區變更的訊息。
如要接收通知,請務必:
- 使用 Artifact Registry 在專案中建立名為
gcr
的主題。 - 建立主題訂閱項目。
- 設定訂閱者應用程式,以便接收有關存放區變更的訊息。
- 視情況設定權限,控管主題和訂閱的存取權。
建立 Artifact Registry 主題
如要使用 Google 擁有及代管的 加密金鑰建立 gcr
主題,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Pub/Sub 主題頁面。
按一下 [Create Topic] (建立主題)。
輸入主題 ID
gcr
。按一下 [Create Topic] (建立主題)。
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 主題頁面。
按一下專案的主題。
按一下 [Create Subscription] (建立訂閱)。
輸入訂閱名稱:
projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
將「Delivery Type」保留設為「Pull」。
按一下 [Create] (建立)。
gcloud
執行下列指令:
gcloud pubsub subscriptions create SUBSCRIPTION-NAME --topic=gcr
將 SUBSCRIPTION-NAME 替換為訂閱名稱
如要進一步瞭解 gcloud pubsub subscriptions
指令,請參閱 subscriptions
說明文件。
您現在已訂閱 gcr
主題。接下來,請為觸發存放區變更的 ID設定權限。
設定訂閱者應用程式
建立主題和該主題的訂閱項目後,您可以設定訂閱者應用程式,也就是接收有關存放區變更訊息的應用程式。訂閱者應用程式會執行事件通知、系統記錄和應用程式間通訊等工作。
當存放區使用者推送或刪除圖片時,系統會執行以下步驟:
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-west1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5..."
}
將新的映像檔標記推送至 Artifact Registry 時,通知酬載看起來會如下所示:
{
"action":"INSERT",
"digest":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5...",
"tag":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}
訊息可使用 digest
或 tag
鍵來識別相關的圖片。
從 Artifact Registry 刪除圖片標記時,通知酬載看起來會如下所示:
{
"action":"DELETE",
"tag":"us-west1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}
訊息可能包含 DELETE
或 INSERT
以做為 action
鍵的值。
後續步驟
- 參閱 Pub/Sub 說明文件。
- 如要深入瞭解 Pub/Sub,請參閱「什麼是 Pub/Sub?」一文。
- 進一步瞭解 Pub/Sub 存取權控管角色。